diff options
39 files changed, 1542 insertions, 957 deletions
diff --git a/Master/bin/i386-cygwin/asy.exe b/Master/bin/i386-cygwin/asy.exe Binary files differindex d68dd6695fc..c72517c1b55 100755 --- a/Master/bin/i386-cygwin/asy.exe +++ b/Master/bin/i386-cygwin/asy.exe diff --git a/Master/texmf/asymptote/GUI/xasyMainWin.py b/Master/texmf/asymptote/GUI/xasyMainWin.py index 95dd4fb7cbc..2876d014a56 100755 --- a/Master/texmf/asymptote/GUI/xasyMainWin.py +++ b/Master/texmf/asymptote/GUI/xasyMainWin.py @@ -57,9 +57,9 @@ class xasyMainWin: self.createWidgets() self.resetGUI() if sys.platform[:3] == "win": - site="http://effbot.org/downloads/PIL-1.1.7b1.win32-py2.6.exe" + site="http://effbot.org/downloads/PIL-1.1.7.win32-py2.6.exe" else: - site="http://effbot.org/downloads/Imaging-1.1.7b1.tar.gz" + site="http://effbot.org/downloads/Imaging-1.1.7.tar.gz" if not PILAvailable: tkMessageBox.showerror("Failed Dependencies","An error occurred loading the required PIL library. Please install "+site) self.parent.destroy() diff --git a/Master/texmf/asymptote/GUI/xasyVersion.py b/Master/texmf/asymptote/GUI/xasyVersion.py index 17f9f0aadf1..a10e441dc96 100755 --- a/Master/texmf/asymptote/GUI/xasyVersion.py +++ b/Master/texmf/asymptote/GUI/xasyVersion.py @@ -1,2 +1,2 @@ #!/usr/bin/env python -xasyVersion = "1.94" +xasyVersion = "1.96" diff --git a/Master/texmf/asymptote/asy-keywords.el b/Master/texmf/asymptote/asy-keywords.el index d0e2246eaad..1328eae5e2c 100644 --- a/Master/texmf/asymptote/asy-keywords.el +++ b/Master/texmf/asymptote/asy-keywords.el @@ -2,7 +2,7 @@ ;; This file is automatically generated by asy-list.pl. ;; Changes will be overwritten. ;; -(defvar asy-keywords-version "1.94") +(defvar asy-keywords-version "1.96") (defvar asy-keyword-name '( and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator )) @@ -11,7 +11,7 @@ and controls tension atleast curl if else while for do return break continue str Braid FitResult Label Legend Segment Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse file filltype frame grid3 guide horner hsv hyperbola indexedTransform int inversion key light line linefit marginT marker mass object pair parabola path path3 pen picture point position projection real revolution scaleT scientific segment side slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void )) (defvar asy-function-name '( -AND Arc ArcArrow ArcArrows Arrow Arrows Automatic AvantGarde BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Link Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Segment Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _cputime _draw _eval _image _labelpath _projection _strokepath _texpath aCos aSin aTan abort abs accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addnode addnodes addpenarc addpenline adjust alias align all altitude angabscissa angle angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit atime attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial binput bins bisector bisectorpoint blend blockconnector boutput box bqe breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 case4 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment checkconditionlength checker checkincreasing checklengths checkposition checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect connected connectedindex containmentTree contains contour contour3 contouredges controlSpecifier convert coordinates coordsys copy cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawline drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 empty enclose end endScript endclip endgroup endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitXasyMode exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image incenter incentral incircle increasing incrementposition indexedTransform indexedfigure initXasyMode initdefaults input inradius insert inside integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isCCW isDuplicate isogonal isogonalconjugate isotomic isotomicconjugate isparabola italic item key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout ldexp leastsquares legend legenditem length lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup magnetize makeNode makedraw makepen map margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markuniform mass masscenter massformat math max max3 maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minbezier minbound minipage minratio mintimes miterlimit momArrowPath momarrowsize monotonic multifigure nativeformat natural needshipout newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa none norm normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orientation orig_circlenodesnumber orig_circlenodesnumber1 orig_draw orig_ellipsenodesnumber orig_ellipsenodesnumber1 orig_hyperbolanodesnumber orig_parabolanodesnumber origin orthic orthocentercenter outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum path path3 pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon postcontrol postscript pow10 ppoint prc prc0 precision precontrol prepend print_random_addresses project projection purge pwhermite quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle same samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchindex searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment sequence setcontour setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show side simeq simpson sin single sinh size size3 skewness skip slant sleep slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys startScript startTrembling stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose tremble trembleFuzz tremble_circlenodesnumber tremble_circlenodesnumber1 tremble_draw tremble_ellipsenodesnumber tremble_ellipsenodesnumber1 tremble_hyperbolanodesnumber tremble_marknodes tremble_markuniform tremble_parabolanodesnumber triangle triangleAbc triangleabc triangulate tricoef tridiagonal trilinear trim trueMagnetize truepoint tube uncycle unfill uniform unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xaxis xaxis3 xaxis3At xaxisAt xequals xinput xlimits xoutput xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zero3 zlimits zpart ztick ztick3 ztrans )) +AND Arc ArcArrow ArcArrows Arrow Arrows Automatic AvantGarde BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Link Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Segment Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _image _labelpath _projection _strokepath _texpath aCos aSin aTan abort abs accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addnode addnodes addpenarc addpenline adjust alias align all altitude angabscissa angle angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit atime attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial binput bins bisector bisectorpoint bispline blend blockconnector boutput box bqe breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 case4 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment checkconditionlength checker checkincreasing checklengths checkposition checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect connected connectedindex containmentTree contains contour contour3 contouredges controlSpecifier convert coordinates coordsys copy cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPRCcylinder drawPRCdisk drawPRCsphere drawPRCtube drawPhoton drawScalar drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawline drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 empty enclose end endScript endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitXasyMode exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image incenter incentral incircle increasing incrementposition indexedTransform indexedfigure initXasyMode initdefaults input inradius insert inside integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isCCW isDuplicate isogonal isogonalconjugate isotomic isotomicconjugate isparabola italic item key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup magnetize makeNode makedraw makepen map margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markuniform mass masscenter massformat math max max3 maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minbezier minbound minipage minratio mintimes miterlimit momArrowPath momarrowsize monotonic multifigure nativeformat natural needshipout newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa none norm normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orientation orig_circlenodesnumber orig_circlenodesnumber1 orig_draw orig_ellipsenodesnumber orig_ellipsenodesnumber1 orig_hyperbolanodesnumber orig_parabolanodesnumber origin orthic orthocentercenter outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum path path3 pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 photon piecewisestraight point polar polarconicroutine polargraph polygon postcontrol postscript pow10 ppoint prc prc0 precision precontrol prepend print_random_addresses project projection purge pwhermite quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle same samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchindex searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment sequence setcontour setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show side simeq simpson sin single sinh size size3 skewness skip slant sleep slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys startScript startTrembling stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose tremble trembleFuzz tremble_circlenodesnumber tremble_circlenodesnumber1 tremble_draw tremble_ellipsenodesnumber tremble_ellipsenodesnumber1 tremble_hyperbolanodesnumber tremble_marknodes tremble_markuniform tremble_parabolanodesnumber triangle triangleAbc triangleabc triangulate tricoef tridiagonal trilinear trim trueMagnetize truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xaxis xaxis3 xaxis3At xaxisAt xequals xinput xlimits xoutput xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zero3 zlimits zpart ztick ztick3 ztrans )) (defvar asy-variable-name '( AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XYAlign YAlign Yellow YellowGreen YellowOrange addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate beveljoin bigvertexpen bigvertexsize black blue bm bottom bp brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen diagnostics differentlengths dot dotfactor dotframe dotted doublelinepen doublelinespacing down duplicateFuzz edge ellipsenodesnumberfactor eps epsgeo epsilon evenodd extendcap exterior fermionpen figureborder figuremattpen firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbola hyperbolanodesnumberfactor identity4 ignore inXasyMode inch inches includegraphicscommand inf infinity institutionpen intMax intMin interior invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow line linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticPoints magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings shipped signedtrailingzero solid springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tremblingMode undefined unitcircle unitsquare up urlpen urlskip version vertexpen vertexsize viewportmargin viewportsize vline white wye xformStack yellow ylabelwidth zerotickfuzz zerowinding )) diff --git a/Master/texmf/asymptote/bezulate.asy b/Master/texmf/asymptote/bezulate.asy index d935d358989..f3817a47bcf 100644 --- a/Master/texmf/asymptote/bezulate.asy +++ b/Master/texmf/asymptote/bezulate.asy @@ -24,20 +24,20 @@ path[][] containmentTree(path[] paths) bool classified=false; // check if current curve contains or is contained in a group of curves for(int j=0; !classified && j < result.length; ++j) - { - int test = inside(paths[i],result[j][0],zerowinding); - if(test == 1) // current curve contains group's toplevel curve { - // replace toplevel curve with current curve - result[j].insert(0,paths[i]); - classified = true; - } - else if(test == -1) // current curve contained in group's toplevel curve - { - result[j].push(paths[i]); - classified = true; + int test = inside(paths[i],result[j][0],zerowinding); + if(test == 1) // current curve contains group's toplevel curve + { + // replace toplevel curve with current curve + result[j].insert(0,paths[i]); + classified = true; + } + else if(test == -1) // current curve contained in group's toplevel curve + { + result[j].push(paths[i]); + classified = true; + } } - } // create a new group if this curve does not belong to another group if(!classified) result.push(new path[] {paths[i]}); @@ -92,11 +92,11 @@ void connect(path[] paths, path[] result, path[] patch) path[] remainingCurves; path[] inners; for(path[] innerGroup:innerTree) - { - inners.push(innerGroup[0]); - if(innerGroup.length>1) - remainingCurves.append(innerGroup[1:]); - } + { + inners.push(innerGroup[0]); + if(innerGroup.length>1) + remainingCurves.append(innerGroup[1:]); + } connect(remainingCurves,result,patch); real d=2*abs(max(outer)-min(outer)); while(inners.length > 0) { @@ -134,36 +134,36 @@ void connect(path[] paths, path[] result, path[] patch) while(!found && timeoffset > fuzz) { timeoffset /= 2; if(countIntersections(allCurves,start, - point(outer,endtime+timeoffset)) == 2) - { - portion = subpath(outer,endtime,endtime+timeoffset)--start--cycle; - found=true; - // check if an inner curve is inside the portion - for(int k = 0; found && k < inners.length; ++k) + point(outer,endtime+timeoffset)) == 2) { - if(k!=curveIndex && - inside(portion,point(inners[k],0),zerowinding)) - found = false; + portion = subpath(outer,endtime,endtime+timeoffset)--start--cycle; + found=true; + // check if an inner curve is inside the portion + for(int k = 0; found && k < inners.length; ++k) + { + if(k!=curveIndex && + inside(portion,point(inners[k],0),zerowinding)) + found = false; + } } - } } if(!found) timeoffset=-2; while(!found && timeoffset < -fuzz) { timeoffset /= 2; if(countIntersections(allCurves,start, - point(outer,endtime+timeoffset))==2) - { - portion = subpath(outer,endtime+timeoffset,endtime)--start--cycle; - found = true; - // check if an inner curve is inside the portion - for(int k = 0; found && k < inners.length; ++k) + point(outer,endtime+timeoffset))==2) { - if(k!=curveIndex && - inside(portion,point(inners[k],0),zerowinding)) - found = false; + portion = subpath(outer,endtime+timeoffset,endtime)--start--cycle; + found = true; + // check if an inner curve is inside the portion + for(int k = 0; found && k < inners.length; ++k) + { + if(k!=curveIndex && + inside(portion,point(inners[k],0),zerowinding)) + found = false; + } } - } } assert(found); endtime=min(endtime,endtime+timeoffset); @@ -171,8 +171,8 @@ void connect(path[] paths, path[] result, path[] patch) // depends on the curves having opposite orientations path remainder=section(outer,endtime+timeoffset,endtime) - --uncycle(inners[curveIndex], - starttime)--cycle; + --uncycle(inners[curveIndex], + starttime)--cycle; inners.delete(curveIndex); outer = remainder; patch.append(portion); diff --git a/Master/texmf/asymptote/embed.asy b/Master/texmf/asymptote/embed.asy index 504b3af66b0..dc6c7d4101a 100644 --- a/Master/texmf/asymptote/embed.asy +++ b/Master/texmf/asymptote/embed.asy @@ -1,6 +1,6 @@ if(latex()) { -usepackage("hyperref"); -texpreamble("\hypersetup{"+settings.hyperrefOptions+"}"); + usepackage("hyperref"); + texpreamble("\hypersetup{"+settings.hyperrefOptions+"}"); texpreamble(" \ifx\pdfhorigin\undefined% \usepackage[3D,dvipdfmx]{movie15} diff --git a/Master/texmf/asymptote/geometry.asy b/Master/texmf/asymptote/geometry.asy index 8679ada4c75..41a6397de64 100644 --- a/Master/texmf/asymptote/geometry.asy +++ b/Master/texmf/asymptote/geometry.asy @@ -6432,7 +6432,7 @@ point operator *(inversion i, point P) void lineinversion() { - warning("lineinversion","the inversion of the line is not a circle. + warning("lineinversion","the inversion of the line is not a circle. The returned circle has an infinite radius, circle.l has been set."); } diff --git a/Master/texmf/asymptote/graph3.asy b/Master/texmf/asymptote/graph3.asy index 32f66851e75..9c6529a74dd 100644 --- a/Master/texmf/asymptote/graph3.asy +++ b/Master/texmf/asymptote/graph3.asy @@ -59,7 +59,7 @@ void drawtick(picture pic, transform3 T, path3 g, path3 g2, G=(sign == 0) ? locate1.V-Size*locate1.dir--locate1.V+Size*locate1.dir : locate1.V--locate1.V+Size*sign*locate1.dir; - draw(pic,G,p); + draw(pic,G,p,name="tick"); } triple ticklabelshift(triple align, pen p=currentpen) @@ -216,7 +216,10 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null, } else ticklabel=Format(format); } - begingroup3(pic); + bool labelaxis=L.s != "" && primary; + + begingroup3(pic,"axis"); + if(primary) draw(pic,margin(G,p).g,p,arrow); else draw(pic,G,p); @@ -230,8 +233,7 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null, if(val >= a && val <= b) drawtick(pic,t,g,g2,locate,val,size,sign,ptick,extend); } - endgroup3(pic); - + if(N == 0) N=1; if(Size > 0 && primary) { for(int i=(beginlabel ? 0 : 1); @@ -243,8 +245,10 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null, } } } - if(L.s != "" && primary) + if(labelaxis) labelaxis(pic,t,L,G,locate,Sign,ticklabels); + + endgroup3(pic); }; } @@ -1570,8 +1574,8 @@ surface surface(triple[][] f, bool[][] cond={}) for(int j=0; j < ny; ++j) { if(all || (condi[j] && condi[j+1] && condp[j] && condp[j+1])) s.s[++k]=patch(new triple[] {fi[j],fp[j],fp[j+1],fi[j+1]}); - indexi[j]=k; - } + indexi[j]=k; + } } if(count == nx*ny) { @@ -1582,6 +1586,123 @@ surface surface(triple[][] f, bool[][] cond={}) return s; } +surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, + real[] x, real[] y, bool[][] cond={}) +{ // z[i][j] is the value at (x[i],y[j]) + // p and q are the first derivatives with respect to x and y, respectively + // r is the second derivative ddu/dxdy + int n=x.length-1; + int m=y.length-1; + + bool all=cond.length == 0; + + int count; + if(all) + count=n*m; + else { + count=0; + for(int i=0; i < n; ++i) { + bool[] condi=cond[i]; + for(int j=0; j < m; ++j) + if(condi[j]) ++count; + } + } + + surface s=surface(count); + s.index=new int[n][m]; + int k=-1; + for(int i=0; i < n; ++i) { + bool[] condi=all ? null : cond[i]; + real xi=x[i]; + real[] zi=z[i]; + real[] zp=z[i+1]; + real[] ri=r[i]; + real[] rp=r[i+1]; + real[] pi=p[i]; + real[] pp=p[i+1]; + real[] qi=q[i]; + real[] qp=q[i+1]; + real xp=x[i+1]; + real hx=(xp-xi)/3; + int[] indexi=s.index[i]; + for(int j=0; j < m; ++j) { + real yj=y[j]; + real yp=y[j+1]; + if(all || condi[j]) { + triple[][] P=array(4,array(4,O)); + real hy=(yp-yj)/3; + real hxy=hx*hy; + // x and y directions + for(int k=0; k < 4; ++k) { + P[0][k] += xi*X; + P[k][0] += yj*Y; + P[1][k] += (xp+2*xi)/3*X; + P[k][1] += (yp+2*yj)/3*Y; + P[2][k] += (2*xp+xi)/3*X; + P[k][2] += (2*yp+yj)/3*Y; + P[3][k] += xp*X; + P[k][3] += yp*Y; + } + // z: value + P[0][0] += zi[j]*Z; + P[3][0] += zp[j]*Z; + P[0][3] += zi[j+1]*Z; + P[3][3] += zp[j+1]*Z; + // z: first derivative + P[1][0] += (P[0][0].z+hx*pi[j])*Z; + P[1][3] += (P[0][3].z+hx*pi[j+1])*Z; + P[2][0] += (P[3][0].z-hx*pp[j])*Z; + P[2][3] += (P[3][3].z-hx*pp[j+1])*Z; + P[0][1] += (P[0][0].z+hy*qi[j])*Z; + P[3][1] += (P[3][0].z+hy*qp[j])*Z; + P[0][2] += (P[0][3].z-hy*qi[j+1])*Z; + P[3][2] += (P[3][3].z-hy*qp[j+1])*Z; + // z: second derivative + P[1][1] += (P[0][1].z+P[1][0].z-P[0][0].z+hxy*ri[j])*Z; + P[1][2] += (P[0][2].z+P[1][3].z-P[0][3].z-hxy*ri[j+1])*Z; + P[2][1] += (P[2][0].z+P[3][1].z-P[3][0].z-hxy*rp[j])*Z; + P[2][2] += (P[2][3].z+P[3][2].z-P[3][3].z+hxy*rp[j+1])*Z; + s.s[++k]=patch(P); + indexi[j]=k; + } + } + } + + return s; +} + +// return the surface described by a real matrix f, interpolated with +// xsplinetype and ysplinetype. +surface surface(real[][] f, real[] x, real[] y, + splinetype xsplinetype=null, splinetype ysplinetype=xsplinetype, + bool[][] cond={}) +{ + real epsilon=sqrtEpsilon*norm(y); + if(xsplinetype == null) + xsplinetype=(abs(x[0]-x[x.length-1]) <= epsilon) ? periodic : notaknot; + if(ysplinetype == null) + ysplinetype=(abs(y[0]-y[y.length-1]) <= epsilon) ? periodic : notaknot; + int n=x.length; int m=y.length; + real[][] ft=transpose(f); + real[][] tp=new real[m][]; + for(int j=0; j < m; ++j) + tp[j]=xsplinetype(x,ft[j]); + real[][] q=new real[n][]; + for(int i=0; i < n; ++i) + q[i]=ysplinetype(y,f[i]); + real[][] qt=transpose(q); + real[] d1=xsplinetype(x,qt[0]); + real[] d2=xsplinetype(x,qt[m-1]); + real[][] r=new real[n][]; + real[][] p=transpose(tp); + for(int i=0; i < n; ++i) + r[i]=clamped(d1[i],d2[i])(y,p[i]); + surface s=bispline(f,p,q,r,x,y,cond); + if(xsplinetype == periodic) s.ucyclic(true); + if(ysplinetype == periodic) s.vcyclic(true); + return s; +} + // return the surface described by a real matrix f, interpolated with // xsplinetype and ysplinetype. surface surface(real[][] f, pair a, pair b, splinetype xsplinetype, @@ -1730,30 +1851,36 @@ guide3[][] lift(real f(pair z), guide[][] g, interpolate3 join=operator --) } void draw(picture pic=currentpicture, Label[] L=new Label[], - guide3[][] g, pen[] p) + guide3[][] g, pen[] p, light light=currentlight, string name="", + render render=defaultrender, + interaction interaction=LabelInteraction()) { pen thin=is3D() ? thin() : defaultpen; - begingroup3(pic); + if(g.length > 1) + begingroup3(pic,name == "" ? "contours" : name,render); for(int cnt=0; cnt < g.length; ++cnt) { guide3[] gcnt=g[cnt]; pen pcnt=thin+p[cnt]; for(int i=0; i < gcnt.length; ++i) - draw(pic,gcnt[i],pcnt); + draw(pic,gcnt[i],pcnt,light,name); if(L.length > 0) { Label Lcnt=L[cnt]; for(int i=0; i < gcnt.length; ++i) { if(Lcnt.s != "" && size(gcnt[i]) > 1) - label(pic,Lcnt,gcnt[i],pcnt); + label(pic,Lcnt,gcnt[i],pcnt,name,interaction); } } } - endgroup3(pic); + if(g.length > 1) + endgroup3(pic); } void draw(picture pic=currentpicture, Label[] L=new Label[], - guide3[][] g, pen p=currentpen) + guide3[][] g, pen p=currentpen, light light=currentlight, + string name="", interaction interaction=LabelInteraction()) { - draw(pic,L,g,sequence(new pen(int) {return p;},g.length)); + draw(pic,L,g,sequence(new pen(int) {return p;},g.length),light,name, + interaction); } real maxlength(triple f(pair z), pair a, pair b, int nu, int nv) diff --git a/Master/texmf/asymptote/labelpath3.asy b/Master/texmf/asymptote/labelpath3.asy index 8483a76a047..63b2290f1f2 100644 --- a/Master/texmf/asymptote/labelpath3.asy +++ b/Master/texmf/asymptote/labelpath3.asy @@ -48,10 +48,10 @@ surface labelpath(string s, path3 p, real angle=90, triple optional=O) path[] text=texpath(Label(s,(0,0),Align,basealign)); text=scale(1/(max(text).x-min(text).x))*text; path[][] decompose=containmentTree(text); - + real[][] xpos=new real[decompose.length][2]; surface sf; - for(int i=0; i < decompose.length; ++i) {// Identify positions along x-axis + for(int i=0; i < decompose.length; ++i) {// Identify positions along x-axis xpos[i][1]=i; real pos0=0.5(max(decompose[i]).x+min(decompose[i]).x); xpos[i][0]=pos0; diff --git a/Master/texmf/asymptote/lmfit.asy b/Master/texmf/asymptote/lmfit.asy index 72745625824..e70421074e5 100644 --- a/Master/texmf/asymptote/lmfit.asy +++ b/Master/texmf/asymptote/lmfit.asy @@ -28,7 +28,7 @@ the least-squares sum % \begin{equation*} - \sum_{i = 1}^n \left( \frac{y_i - f(a_1, \dots, a_m; x_i)}{\Delta y_i} \right)^2 + \sum_{i = 1}^n \left( \frac{y_i - f(a_1, \dots, a_m; x_i)}{\Delta y_i} \right)^2 \end{equation*} % with respect to the parameters $a_1, \dots, a_m$. @@ -822,13 +822,13 @@ struct FitResult { Fits data points to a function that depends on some parameters. Parameters: - - xdata: Array of x values. - - ydata: Array of y values. - - errors: Array of experimental errors; each element must be strictly positive - - function: Fit function. - - parameters: Parameter array. Before calling fit(), this must contain the initial guesses for the parameters. - Upon return, it will contain the solution parameters. - - control: object of type FitControl that controls various aspects of the fitting procedure. + - xdata: Array of x values. + - ydata: Array of y values. + - errors: Array of experimental errors; each element must be strictly positive + - function: Fit function. + - parameters: Parameter array. Before calling fit(), this must contain the initial guesses for the parameters. + Upon return, it will contain the solution parameters. + - control: object of type FitControl that controls various aspects of the fitting procedure. Returns: An object of type FitResult that conveys information about the fitting process. @@ -865,12 +865,12 @@ FitResult fit(real[] xdata, real[] ydata, real[] errors, real function(real[], r Fits data points to a function that depends on some parameters. Parameters: - - xdata: Array of x values. - - ydata: Array of y values. - - function: Fit function. - - parameters: Parameter array. Before calling fit(), this must contain the initial guesses for the parameters. - Upon return, it will contain the solution parameters. - - control: object of type FitControl that controls various aspects of the fitting procedure. + - xdata: Array of x values. + - ydata: Array of y values. + - function: Fit function. + - parameters: Parameter array. Before calling fit(), this must contain the initial guesses for the parameters. + Upon return, it will contain the solution parameters. + - control: object of type FitControl that controls various aspects of the fitting procedure. Returns: An object of type FitResult that conveys information about the fitting process. diff --git a/Master/texmf/asymptote/math.asy b/Master/texmf/asymptote/math.asy index ff267b955d7..a684307e5a5 100644 --- a/Master/texmf/asymptote/math.asy +++ b/Master/texmf/asymptote/math.asy @@ -144,6 +144,36 @@ int[][] segment(bool[] b) return segment; } +// If the sorted array a does not contain x, insert it sequentially, +// returning the index of x in the resulting array. +int unique(real[] a, real x) { + int i=search(a,x); + if(i == -1 || x != a[i]) { + ++i; + a.insert(i,x); + return i; + } + return i; +} + +int unique(string[] a, string x) { + int i=search(a,x); + if(i == -1 || x != a[i]) { + ++i; + a.insert(i,x); + return i; + } + return i; +} + +bool lexorder(pair a, pair b) { + return a.x < b.x || (a.x == b.x && a.y <= b.y); +} + +bool lexorder(triple a, triple b) { + return a.x < b.x || (a.x == b.x && (a.y < b.y || (a.y == b.y && a.z <= b.z))); +} + real[] zero(int n) { return sequence(new real(int) {return 0;},n); diff --git a/Master/texmf/asymptote/plain_arrows.asy b/Master/texmf/asymptote/plain_arrows.asy index 5284ee9650d..490f76f777c 100644 --- a/Master/texmf/asymptote/plain_arrows.asy +++ b/Master/texmf/asymptote/plain_arrows.asy @@ -546,18 +546,18 @@ void arrow(picture pic=currentpicture, Label L="", pair b, pair dir, // Fit an array of pictures simultaneously using the sizing of picture all. frame[] fit2(picture[] pictures, picture all) { - frame[] out; - if(!all.empty2()) { - transform t=all.calculateTransform(); - pair m=all.min(t); - pair M=all.max(t); - for(picture pic : pictures) { - frame f=pic.fit(t); - draw(f,m,nullpen); - draw(f,M,nullpen); - out.push(f); - } - } + frame[] out; + if(!all.empty2()) { + transform t=all.calculateTransform(); + pair m=all.min(t); + pair M=all.max(t); + for(picture pic : pictures) { + frame f=pic.fit(t); + draw(f,m,nullpen); + draw(f,M,nullpen); + out.push(f); + } + } return out; } diff --git a/Master/texmf/asymptote/solids.asy b/Master/texmf/asymptote/solids.asy index 7e5883bc884..c9be44552c9 100644 --- a/Master/texmf/asymptote/solids.asy +++ b/Master/texmf/asymptote/solids.asy @@ -347,11 +347,12 @@ surface surface(revolution r, int n=nslice, pen color(int i, real j)=null) void draw(picture pic=currentpicture, revolution r, int m=0, int n=nslice, pen frontpen=currentpen, pen backpen=frontpen, pen longitudinalpen=frontpen, pen longitudinalbackpen=backpen, - light light=currentlight, projection P=currentprojection) + light light=currentlight, string name="", + render render=defaultrender, projection P=currentprojection) { pen thin=is3D() ? thin() : defaultpen; skeleton s=r.skeleton(m,n,P); - begingroup3(pic); + begingroup3(pic,name == "" ? "skeleton" : name,render); if(frontpen != nullpen) { draw(pic,s.transverse.back,thin+defaultbackpen+backpen,light); draw(pic,s.transverse.front,thin+frontpen,light); diff --git a/Master/texmf/asymptote/three.asy b/Master/texmf/asymptote/three.asy index 5b3dd26aba7..b0d9c456faa 100644 --- a/Master/texmf/asymptote/three.asy +++ b/Master/texmf/asymptote/three.asy @@ -11,22 +11,78 @@ if(prc0()) { } } +// Useful lossy compression values. +restricted real Zero=0; +restricted real Low=0.0001; +restricted real Medium=0.001; +restricted real High=0.01; + +restricted int PRCsphere=0; // Renders slowly but produces smaller PRC files. +restricted int NURBSsphere=1; // Renders fast but produces larger PRC files. + +struct render +{ + // PRC parameters: + real compression; // lossy compression parameter (0=no compression) + real granularity; // PRC rendering granularity + + bool closed; // use one-sided rendering? + bool tessellate; // use tessellated mesh to store straight patches? + bool3 merge; // merge nodes before rendering, for lower quality + // but faster PRC rendering? + // (default=merge only transparent patches) + int sphere; // PRC sphere type (PRCsphere or NURBSsphere). + + // General parameters: + real margin; // shrink amount for rendered openGL viewport, in bp. + real tubegranularity; // granularity for rendering tubes + + static render defaultrender; + + void operator init(real compression=defaultrender.compression, + real granularity=defaultrender.granularity, + bool closed=defaultrender.closed, + bool tessellate=defaultrender.tessellate, + bool3 merge=defaultrender.merge, + int sphere=defaultrender.sphere, + real margin=defaultrender.margin, + real tubegranularity=defaultrender.tubegranularity) + { + this.compression=compression; + this.granularity=granularity; + this.closed=closed; + this.tessellate=tessellate; + this.merge=merge; + this.sphere=sphere; + this.margin=margin; + this.tubegranularity=tubegranularity; + } +} + +render operator init() {return render();} + +render defaultrender=render.defaultrender=new render; +defaultrender.compression=High; +defaultrender.granularity=Medium; +defaultrender.closed=false; +defaultrender.tessellate=false; +defaultrender.merge=false; +defaultrender.margin=0.02; +defaultrender.tubegranularity=0.005; +defaultrender.sphere=NURBSsphere; + real defaultshininess=0.25; -real defaultgranularity=0; -real linegranularity=0.005; -int linesectors=8; // Number of angular sectors. -real dotgranularity=0.0001; + real angleprecision=1e-5; // Precision for centering perspective projections. int maxangleiterations=25; -real rendermargin=0.02; string defaultembed3Doptions; string defaultembed3Dscript; real defaulteyetoview=63mm/1000mm; -string partname(string s, int i=0) +string partname(int i=0) { - return s == "" ? "" : s+"-"+string(i); + return string(i+1); } triple O=(0,0,0); @@ -733,7 +789,7 @@ struct Controls { // 3D extension of John Hobby's control point formula // (cf. The MetaFont Book, page 131), // as described in John C. Bowman and A. Hammerlindl, - // TUGBOAT: The Communications of th TeX Users Group 29:2 (2008). + // TUGBOAT: The Communications of the TeX Users Group 29:2 (2008). void operator init(triple v0, triple v1, triple d0, triple d1, real tout, real tin, bool atLeast) { @@ -1995,13 +2051,24 @@ path3 plane(triple u, triple v, triple O=O) include three_light; void draw(frame f, path3 g, material p=currentpen, light light=nolight, - string name="", projection P=currentprojection); + string name="", render render=defaultrender, + projection P=currentprojection); + +void begingroup3(frame f, string name="", render render=defaultrender, + triple center=O, int interaction=0) +{ + _begingroup3(f,name,render.compression,render.granularity,render.closed, + render.tessellate,render.merge == false, + render.merge == true,center,interaction); +} -void begingroup3(picture pic=currentpicture, string name="") +void begingroup3(picture pic=currentpicture, string name="", + render render=defaultrender, + triple center=O, int interaction=0) { pic.add(new void(frame f, transform3, picture pic, projection) { if(is3D()) - begingroup(f,name); + begingroup3(f,name,render,center,interaction); if(pic != null) begingroup(pic); },true); @@ -2011,7 +2078,7 @@ void endgroup3(picture pic=currentpicture) { pic.add(new void(frame f, transform3, picture pic, projection) { if(is3D()) - endgroup(f); + endgroup3(f); if(pic != null) endgroup(pic); },true); @@ -2060,13 +2127,14 @@ pair max(frame f, projection P) void draw(picture pic=currentpicture, Label L="", path3 g, align align=NoAlign, material p=currentpen, margin3 margin=NoMargin3, - light light=nolight, string name="") + light light=nolight, string name="", + render render=defaultrender) { pen q=(pen) p; pic.add(new void(frame f, transform3 t, picture pic, projection P) { path3 G=margin(t*g,q).g; if(is3D()) { - draw(f,G,p,light,name,null); + draw(f,G,p,light,name,render,null); if(pic != null && size(G) > 0) pic.addBox(min(G,P),max(G,P),min(q),max(q)); } @@ -2086,45 +2154,91 @@ include three_tube; draw=new void(frame f, path3 g, material p=currentpen, light light=nolight, string name="", + render render=defaultrender, projection P=currentprojection) { pen q=(pen) p; if(is3D()) { - p=material(p,(p.granularity >= 0) ? p.granularity : linegranularity); + p=material(p); void drawthick(path3 g) { if(settings.thick) { real width=linewidth(q); if(width > 0) { - tube T=tube(g,width,linesectors); + bool prc=prc(); + void cylinder(transform3) {}; + void sphere(transform3, bool half) {}; + void disk(transform3) {}; + void tube(path3, path3); + if(prc) { + cylinder=new void(transform3 t) {drawPRCcylinder(f,t,p,light);}; + sphere=new void(transform3 t, bool half) + {drawPRCsphere(f,t,half,p,light,render);}; + disk=new void(transform3 t) {draw(f,t*unitdisk,p,light);}; + tube=new void(path3 center, path3 g) + {drawPRCtube(f,center,g,p,light);}; + } + real linecap; + real r; + bool open=!cyclic(g); int L=length(g); + triple g0,gL; + if(open && L > 0) { + g0=point(g,0); + gL=point(g,L); + linecap=linecap(q); + r=0.5*width; + if(linecap == 2) { + g0 -= r*dir(g,0); + gL += r*dir(g,L); + g=g0..g..gL; + L += 2; + } + } + tube T=tube(g,width,render,cylinder,sphere,tube); + path3 c=T.center; if(L >= 0) { - if(!cyclic(g)) { - real r=0.5*width; - real linecap=linecap(q); - transform3 scale3r=scale3(r); - surface cap; - triple dirL=dir(g,L); + if(open) { + int Lc=length(c); + triple c0=point(c,0); + triple cL=point(c,Lc); triple dir0=dir(g,0); - if(linecap == 0) - cap=scale(r,r,1)*unitdisk; - else if(linecap == 1) - cap=scale3r*((dir0 == O || dirL == O) ? - unitsphere : unithemisphere); - else if(linecap == 2) { - cap=scale3r*unitcylinder; - cap.append(scale3r*shift(Z)*unitdisk); + triple dirL=dir(g,L); + triple dirc0=dir(c,0); + triple dircL=dir(c,Lc); + transform3 t0=shift(g0)*align(-dir0); + transform3 tL=shift(gL)*align(dirL); + transform3 tc0=shift(c0)*align(-dirc0); + transform3 tcL=shift(cL)*align(dircL); + if(linecap == 0 || linecap == 2){ + transform3 scale2r=scale(r,r,1); + T.s.append(t0*scale2r*unitdisk); + disk(tc0*scale2r); + if(L > 0) { + T.s.append(tL*scale2r*unitdisk); + disk(tcL*scale2r); + } + } else if(linecap == 1) { + transform3 scale3r=scale3(r); + T.s.append(t0*scale3r* + (dir0 != O ? unithemisphere : unitsphere)); + sphere(tc0*scale3r,half=straight(c,0)); + if(L > 0) { + T.s.append(tL*scale3r* + (dirL != O ? unithemisphere : unitsphere)); + sphere(tcL*scale3r,half=straight(c,Lc-1)); + } } - T.s.append(shift(point(g,0))*align(-dir0)*cap); - T.s.append(shift(point(g,L))*align(dirL)*cap); } if(opacity(q) == 1) - _draw(f,T.center,q,name); + _draw(f,c,q); } - for(int i=0; i < T.s.s.length; ++i) - draw3D(f,T.s.s[i],p,light,partname(name,i)); - } else _draw(f,g,q,name); - } else _draw(f,g,q,name); + for(patch s : T.s.s) + draw3D(f,s,p,light,prc=false); + } else _draw(f,g,q); + } else _draw(f,g,q); } real[] dash=linetype(adjust(q,arclength(g),cyclic(g))); + if(q != nullpen) + begingroup3(f,name == "" ? "curve" : name,render); if(dash.length == 0) drawthick(g); else { if(sum(dash) > 0) { @@ -2144,22 +2258,33 @@ draw=new void(frame f, path3 g, material p=currentpen, } } } + if(q != nullpen) + endgroup3(f); } else draw(f,project(g,P),q); }; void draw(frame f, explicit path3[] g, material p=currentpen, - light light=nolight, string name="", projection P=currentprojection) + light light=nolight, string name="", + render render=defaultrender, projection P=currentprojection) { + if(g.length > 1) + begingroup3(f,name == "" ? "curve" : name,render); for(int i=0; i < g.length; ++i) - draw(f,g[i],p,light,partname(name,i),P); + draw(f,g[i],p,light,partname(i),render,P); + if(g.length > 1) + endgroup3(f); } void draw(picture pic=currentpicture, explicit path3[] g, material p=currentpen, margin3 margin=NoMargin3, light light=nolight, - string name="") + string name="", render render=defaultrender) { + if(g.length > 1) + begingroup3(pic,name == "" ? "curves" : name,render); for(int i=0; i < g.length; ++i) - draw(pic,g[i],p,margin,light,partname(name,i)); + draw(pic,g[i],p,margin,light,partname(i),render); + if(g.length > 1) + endgroup3(pic); } include three_arrows; @@ -2167,24 +2292,34 @@ include three_arrows; void draw(picture pic=currentpicture, Label L="", path3 g, align align=NoAlign, material p=currentpen, arrowbar3 arrow, arrowbar3 bar=None, margin3 margin=NoMargin3, light light=nolight, - light arrowheadlight=currentlight, string name="") + light arrowheadlight=currentlight, string name="", + render render=defaultrender) { - begingroup3(pic); + bool group=arrow != None || bar != None; + if(group) + begingroup3(pic,name,render); bool drawpath=arrow(pic,g,p,margin,light,arrowheadlight); if(bar(pic,g,p,margin,light,arrowheadlight) && drawpath) - draw(pic,L,g,align,p,margin,light,name); - endgroup3(pic); + draw(pic,L,g,align,p,margin,light); + if(group) + endgroup3(pic); label(pic,L,g,align,(pen) p); } void draw(frame f, path3 g, material p=currentpen, arrowbar3 arrow, light light=nolight, light arrowheadlight=currentlight, - string name="", projection P=currentprojection) + string name="", render render=defaultrender, + projection P=currentprojection) { picture pic; + bool group=arrow != None; + if(group) + begingroup3(f,name,render); if(arrow(pic,g,p,NoMargin3,light,arrowheadlight)) - draw(f,g,p,light,name,P); + draw(f,g,p,light,P); add(f,pic.fit()); + if(group) + endgroup3(f); } void add(picture pic=currentpicture, void d(picture,transform3), @@ -2300,14 +2435,38 @@ private struct viewpoint { triple target,camera,up; real angle; void operator init(string s) { - s=replace(s,new string[][] {{" ",","},{"}{",","},{"{",""},{"}",""},}); - string[] S=split(s,","); - target=((real) S[0],(real) S[1],(real) S[2])*cm; - camera=target+(real) S[6]*((real) S[3],(real) S[4],(real) S[5])*cm; + s=replace(s,'\n'," "); + string[] S=split(s); + int pos(string s, string key) { + int pos=find(s,key); + if(pos < 0) return -1; + pos += length(key); + while(substr(s,pos,1) == " ") ++pos; + if(substr(s,pos,1) == "=") + return pos+1; + return -1; + } + triple C2C=X; + real ROO=1; + real ROLL=0; + angle=30; + int pos; + for(int k=0; k < S.length; ++k) { + if((pos=pos(S[k],"COO")) >= 0) + target=((real) substr(S[k],pos),(real) S[++k],(real) S[++k]); + else if((pos=pos(S[k],"C2C")) >= 0) + C2C=((real) substr(S[k],pos),(real) S[++k],(real) S[++k]); + else if((pos=pos(S[k],"ROO")) >= 0) + ROO=(real) substr(S[k],pos); + else if((pos=pos(S[k],"ROLL")) >= 0) + ROLL=(real) substr(S[k],pos); + else if((pos=pos(S[k],"AAC")) >= 0) + angle=(real) substr(S[k],pos); + } + camera=target+ROO*C2C; triple u=unit(target-camera); triple w=unit(Z-u.z*u); - up=rotate((real) S[7],O,u)*w; - angle=S[8] == "" ? 30 : (real) S[8]; + up=rotate(ROLL,O,u)*w; } } @@ -2393,13 +2552,13 @@ private string billboard(int[] index, triple[] center) if(index.length == 0) return ""; string s=" var zero=new Vector3(0,0,0); -var meshes=scene.meshes; -var count=meshes.count; +var nodes=scene.nodes; +var count=nodes.count; var index=new Array(); for(i=0; i < count; i++) { - var mesh=meshes.getByIndex(i); - var name=mesh.name; + var node=nodes.getByIndex(i); + var name=node.name; end=name.lastIndexOf(\".\")-1; if(end > 0) { if(name.substr(end,1) == \"\001\") { @@ -2407,7 +2566,7 @@ for(i=0; i < count; i++) { n=end-start; if(n > 0) { index[name.substr(start,n)]=i; - mesh.name=name.substr(0,start-1); + node.name=name.substr(0,start-1); } } } @@ -2416,7 +2575,7 @@ for(i=0; i < count; i++) { var center=new Array( "; for(int i=0; i < center.length; ++i) - s += "Vector3("+format(center[i]/cm,",")+"), + s += "Vector3("+format(center[i],",")+"), "; s += "); @@ -2431,12 +2590,12 @@ billboardHandler.onEvent=function(event) function f(i,k) { j=index[i]; if(j >= 0) { - var mesh=meshes.getByIndex(j); - var name=mesh.name; + var node=nodes.getByIndex(j); + var name=node.name; var R=Matrix4x4(); R.setView(zero,direction,up); var c=center[k]; - var T=mesh.transform; + var T=node.transform; T.setIdentity(); T.translateInPlace(c.scale(-1)); T.multiplyInPlace(R); @@ -2513,13 +2672,13 @@ string embed3D(string label="", string text=label, string prefix, if(script == "") script=defaultembed3Dscript; // Adobe Reader doesn't appear to support user-specified viewport lights. - string lightscript=light.on() && !light.viewport ? lightscript(light) : ""; + string lightscript=light.on() && light.viewport ? "" : lightscript(light); real viewplanesize; if(P.infinity) { triple lambda=max3(f)-min3(f); pair margin=viewportmargin((lambda.x,lambda.y)); - viewplanesize=(max(lambda.x+2*margin.x,lambda.y+2*margin.y))/(cm*P.zoom); + viewplanesize=(max(lambda.x+2*margin.x,lambda.y+2*margin.y))/P.zoom; } else if(!P.absolute) P.angle=2*aTan(Tan(0.5*P.angle)); @@ -2542,7 +2701,7 @@ string embed3D(string label="", string text=label, string prefix, P.viewportshift.y*lambda.y/P.zoom,0); } - triple v=P.vector()/cm; + triple v=P.vector(); triple u=unit(v); triple w=Z-u.z*u; real roll; @@ -2560,7 +2719,7 @@ string embed3D(string label="", string text=label, string prefix, ",toolbar="+(settings.toolbar ? "true" : "false")+ ",3Daac="+Format(P.angle)+ ",3Dc2c="+Format(u)+ - ",3Dcoo="+Format(target/cm)+ + ",3Dcoo="+Format(target)+ ",3Droll="+Format(roll)+ ",3Droo="+Format(abs(v))+ ",3Dbg="+Format(light.background()); @@ -2613,7 +2772,7 @@ struct scene if(this.P.center && settings.render != 0) { triple target=0.5*(m+M); this.P.target=target; - this.P.calculate(); + this.P.calculate(); } if(this.P.autoadjust || this.P.infinity) adjusted=adjusted | this.P.adjust(m,M); @@ -2796,7 +2955,7 @@ object embed(string label="", string text=label, string prefix=defaultfilename, } else if(M.z >= 0) abort("camera too close"); shipout3(prefix,f,preview ? nativeformat() : format, - S.width-rendermargin,S.height-rendermargin, + S.width-defaultrender.margin,S.height-defaultrender.margin, P.infinity ? 0 : 2aTan(Tan(0.5*P.angle)*P.zoom), P.zoom,m,M,P.viewportshift, tinv*inverse(modelview)*shift(0,0,zcenter),light.background(), diff --git a/Master/texmf/asymptote/three_arrows.asy b/Master/texmf/asymptote/three_arrows.asy index b4319219284..d81650ec948 100644 --- a/Master/texmf/asymptote/three_arrows.asy +++ b/Master/texmf/asymptote/three_arrows.asy @@ -106,7 +106,7 @@ struct arrowhead3 } if(draw) for(path3 g : H) - s.append(tube(g,width,linesectors).s); + s.append(tube(g,width).s); return shift(v)*s; } diff --git a/Master/texmf/asymptote/three_light.asy b/Master/texmf/asymptote/three_light.asy index 36ba9a34c19..eb85ed0c3e5 100644 --- a/Master/texmf/asymptote/three_light.asy +++ b/Master/texmf/asymptote/three_light.asy @@ -2,27 +2,24 @@ struct material { pen[] p; // diffusepen,ambientpen,emissivepen,specularpen real opacity; real shininess; - real granularity; void operator init(pen diffusepen=black, pen ambientpen=black, pen emissivepen=black, pen specularpen=mediumgray, real opacity=opacity(diffusepen), - real shininess=defaultshininess, - real granularity=-1) { + real shininess=defaultshininess) { p=new pen[] {diffusepen,ambientpen,emissivepen,specularpen}; this.opacity=opacity; this.shininess=shininess; - this.granularity=granularity; } - void operator init(material m, real granularity=m.granularity) { + void operator init(material m) { p=copy(m.p); opacity=m.opacity; shininess=m.shininess; - this.granularity=granularity; } pen diffuse() {return p[0];} pen ambient() {return p[1];} pen emissive() {return p[2];} pen specular() {return p[3];} + void diffuse(pen q) {p[0]=q;} void ambient(pen q) {p[1]=q;} void emissive(pen q) {p[2]=q;} @@ -39,7 +36,6 @@ void write(file file, string s="", material x, suffix suffix=none) write(file,", specular=",x.specular()); write(file,", opacity=",x.opacity); write(file,", shininess=",x.shininess); - write(file,", granularity=",x.granularity); write(file,"}",suffix); } @@ -51,7 +47,7 @@ void write(string s="", material x, suffix suffix=endl) bool operator == (material m, material n) { return all(m.p == n.p) && m.opacity == n.opacity && - m.shininess == n.shininess && m.granularity == n.granularity; + m.shininess == n.shininess; } material operator cast(pen p) @@ -69,10 +65,9 @@ pen operator ecast(material m) return m.p.length > 0 ? m.diffuse() : nullpen; } -material emissive(material m, real granularity=m.granularity) +material emissive(material m) { - return material(black+opacity(m.opacity),black,m.diffuse(),black,m.opacity,1, - granularity); + return material(black+opacity(m.opacity),black,m.diffuse(),black,m.opacity,1); } pen color(triple normal, material m, light light, transform3 T=light.T) { diff --git a/Master/texmf/asymptote/three_surface.asy b/Master/texmf/asymptote/three_surface.asy index 1be7eb0259c..e00acfa8367 100644 --- a/Master/texmf/asymptote/three_surface.asy +++ b/Master/texmf/asymptote/three_surface.asy @@ -4,6 +4,8 @@ private import interpolate; int nslice=12; real camerafactor=1.2; +string meshname(string name) {return name+" mesh";} + private real Fuzz=10.0*realEpsilon; private real nineth=1/9; @@ -1148,22 +1150,53 @@ interaction LabelInteraction() return settings.autobillboard ? Billboard : Embedded; } -void draw3D(frame f, patch s, triple center=O, material m, - light light=currentlight, string name="", - interaction interaction=Embedded) +private material material(material m, light light) +{ + return light.on() || invisible((pen) m) ? m : emissive(m); +} + +void draw3D(frame f, int type=0, patch s, triple center=O, material m, + light light=currentlight, interaction interaction=Embedded, + bool prc=true) { if(s.colors.length > 0) m=mean(s.colors); - bool lighton=light.on(); - if(!lighton && !invisible((pen) m)) - m=emissive(m); + m=material(m,light); real PRCshininess; if(prc()) PRCshininess=PRCshininess(m.shininess); - real granularity=m.granularity >= 0 ? m.granularity : defaultgranularity; + draw(f,s.P,center,s.straight,m.p,m.opacity,m.shininess,PRCshininess, - granularity,s.planar ? s.normal(0.5,0.5) : O,s.colors,lighton,name, - interaction.type); + s.planar ? s.normal(0.5,0.5) : O,s.colors, + light.on(),interaction.type,prc); +} + +void drawPRCsphere(frame f, transform3 t=identity4, bool half=false, material m, + light light=currentlight, render render=defaultrender) +{ + m=material(m,light); + drawPRCsphere(f,t,half,m.p,m.opacity,PRCshininess(m.shininess),render.sphere); +} + +void drawPRCcylinder(frame f, transform3 t=identity4, material m, + light light=currentlight) +{ + m=material(m,light); + drawPRCcylinder(f,t,m.p,m.opacity,PRCshininess(m.shininess)); +} + +void drawPRCdisk(frame f, transform3 t=identity4, material m, + light light=currentlight) +{ + m=material(m,light); + drawPRCdisk(f,t,m.p,m.opacity,PRCshininess(m.shininess)); +} + +void drawPRCtube(frame f, path3 center, path3 g, material m, + light light=currentlight) +{ + m=material(m,light); + drawPRCtube(f,center,g,m.p,m.opacity,PRCshininess(m.shininess)); } void tensorshade(transform t=identity(), frame f, patch s, @@ -1180,22 +1213,28 @@ nullpens.cyclic=true; void draw(transform t=identity(), frame f, surface s, int nu=1, int nv=1, material[] surfacepen, pen[] meshpen=nullpens, light light=currentlight, light meshlight=light, string name="", - projection P=currentprojection) + render render=defaultrender, projection P=currentprojection) { if(is3D()) { + begingroup3(f,name == "" ? "surface" : name,render); for(int i=0; i < s.s.length; ++i) - draw3D(f,s.s[i],surfacepen[i],light,partname(name,i)); + draw3D(f,s.s[i],surfacepen[i],light); + endgroup3(f); pen modifiers=thin()+squarecap; for(int k=0; k < s.s.length; ++k) { pen meshpen=meshpen[k]; if(!invisible(meshpen)) { + begingroup3(f,meshname(name),render); meshpen=modifiers+meshpen; real step=nu == 0 ? 0 : 1/nu; for(int i=0; i <= nu; ++i) - draw(f,s.s[k].uequals(i*step),meshpen,meshlight); + draw(f,s.s[k].uequals(i*step),meshpen,meshlight,partname(i), + render); step=nv == 0 ? 0 : 1/nv; for(int j=0; j <= nv; ++j) - draw(f,s.s[k].vequals(j*step),meshpen,meshlight); + draw(f,s.s[k].vequals(j*step),meshpen,meshlight,partname(j), + render); + endgroup3(f); } } } else { @@ -1232,18 +1271,19 @@ void draw(transform t=identity(), frame f, surface s, int nu=1, int nv=1, void draw(transform t=identity(), frame f, surface s, int nu=1, int nv=1, material surfacepen=currentpen, pen meshpen=nullpen, light light=currentlight, light meshlight=light, string name="", - projection P=currentprojection) + render render=defaultrender, projection P=currentprojection) { material[] surfacepen={surfacepen}; pen[] meshpen={meshpen}; surfacepen.cyclic=true; meshpen.cyclic=true; - draw(t,f,s,nu,nv,surfacepen,meshpen,light,meshlight,name,P); + draw(t,f,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render,P); } void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, material[] surfacepen, pen[] meshpen=nullpens, - light light=currentlight, light meshlight=light, string name="") + light light=currentlight, light meshlight=light, string name="", + render render=defaultrender) { if(s.empty()) return; @@ -1257,7 +1297,7 @@ void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, pic.add(new void(frame f, transform3 t, picture pic, projection P) { surface S=t*s; if(is3D()) - draw(f,S,nu,nv,surfacepen,meshpen,light,meshlight,name); + draw(f,S,nu,nv,surfacepen,meshpen,light,meshlight,name,render); else if(pic != null) pic.add(new void(frame f, transform T) { draw(T,f,S,nu,nv,surfacepen,meshpen,light,meshlight,P); @@ -1288,22 +1328,24 @@ void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, material surfacepen=currentpen, pen meshpen=nullpen, - light light=currentlight, light meshlight=light, string name="") + light light=currentlight, light meshlight=light, string name="", + render render=defaultrender) { material[] surfacepen={surfacepen}; pen[] meshpen={meshpen}; surfacepen.cyclic=true; meshpen.cyclic=true; - draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name); + draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render); } void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, material[] surfacepen, pen meshpen, - light light=currentlight, light meshlight=light, string name="") + light light=currentlight, light meshlight=light, string name="", + render render=defaultrender) { pen[] meshpen={meshpen}; meshpen.cyclic=true; - draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name); + draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render); } surface extrude(path3 p, path3 q) @@ -1376,7 +1418,8 @@ private path[] path(Label L, pair z=0, projection P) void label(frame f, Label L, triple position, align align=NoAlign, pen p=currentpen, light light=nolight, - string name=L.s, interaction interaction=LabelInteraction(), + string name="", render render=defaultrender, + interaction interaction=LabelInteraction(), projection P=currentprojection) { Label L=L.copy(); @@ -1386,10 +1429,10 @@ void label(frame f, Label L, triple position, align align=NoAlign, L.T=L.T*scale(abs(P.camera-position)/abs(P.vector())); if(L.defaulttransform3) L.T3=transform3(P); + begingroup3(f,name == "" ? L.s : name,render); if(is3D()) { - int i=-1; for(patch S : surface(L,position).s) - draw3D(f,S,position,L.p,light,partname(name,++i),interaction); + draw3D(f,S,position,L.p,light,interaction); } else { pen p=color(L.T3*Z,L.p,light,shiftless(P.T.modelview)); if(L.defaulttransform3) { @@ -1404,11 +1447,13 @@ void label(frame f, Label L, triple position, align align=NoAlign, for(patch S : surface(L,position).s) fill(f,project(S.external(),P,1),p); } + endgroup3(f); } void label(picture pic=currentpicture, Label L, triple position, align align=NoAlign, pen p=currentpen, - light light=nolight, string name=L.s, + light light=nolight, string name="", + render render=defaultrender, interaction interaction=LabelInteraction()) { Label L=L.copy(); @@ -1421,18 +1466,18 @@ void label(picture pic=currentpicture, Label L, triple position, triple v=t*position; if(!align.is3D && L.align.relative && L.align.dir3 != O && determinant(P.t) != 0) - L.align(L.align.dir*unit(project(v+L.align.dir3,P.t)-project(v,P.t))); + L.align(L.align.dir*unit(project(v+L.align.dir3,P.t)-project(v,P.t))); if(interaction.targetsize && settings.render != 0) L.T=L.T*scale(abs(P.camera-v)/abs(P.vector())); if(L.defaulttransform3) L.T3=transform3(P); - if(is3D()) { - int i=-1; + surface S=surface(L,v); + begingroup3(f,name == "" ? L.s : name,render,v,interaction.type); + if(is3D()) for(patch S : surface(L,v).s) - draw3D(f,S,v,L.p,light,partname(name,++i),interaction); - } + draw3D(f,S,v,L.p,light,interaction); if(pic != null) { pen p=color(L.T3*Z,L.p,light,shiftless(P.T.modelview)); @@ -1450,6 +1495,7 @@ void label(picture pic=currentpicture, Label L, triple position, fill(f,T*project(S.external(),P,1),p); }); } + endgroup3(f); },!L.defaulttransform3); @@ -1467,7 +1513,7 @@ void label(picture pic=currentpicture, Label L, triple position, } void label(picture pic=currentpicture, Label L, path3 g, align align=NoAlign, - pen p=currentpen, string name=L.s, + pen p=currentpen, light light=nolight, string name="", interaction interaction=LabelInteraction()) { Label L=L.copy(); @@ -1480,11 +1526,11 @@ void label(picture pic=currentpicture, Label L, path3 g, align align=NoAlign, if(L.align.default) { align a; a.init(-I*(position <= sqrtEpsilon ? S : - position >= length(g)-sqrtEpsilon ? N : E),relative=true); + position >= length(g)-sqrtEpsilon ? N : E),relative=true); a.dir3=dir(g,position); // Pass 3D direction via unused field. L.align(a); } - label(pic,L,point(g,position),name,interaction); + label(pic,L,point(g,position),light,name,interaction); } surface extrude(Label L, triple axis=Z) @@ -1609,67 +1655,143 @@ restricted surface unitplane=surface(unitplane); restricted surface unitdisk=surface(unitcircle3); void dot(frame f, triple v, material p=currentpen, - light light=nolight, string name="", projection P=currentprojection) + light light=nolight, string name="", + render render=defaultrender, projection P=currentprojection) { pen q=(pen) p; if(is3D()) { - material m=material(p,p.granularity >= 0 ? p.granularity : dotgranularity); - int i=-1; + begingroup3(f,name == "" ? "dot" : name,render); + real size=0.5*linewidth(dotsize(q)+q); + transform3 T=shift(v)*scale3(size); for(patch s : unitsphere.s) - draw3D(f,shift(v)*scale3(0.5*linewidth(dotsize(q)+q))*s,m,light, - partname(name,++i)); + draw3D(f,T*s,v,p,light,prc=false); + if(prc()) + drawPRCsphere(f,T,p,light); + endgroup3(f); } else dot(f,project(v,P.t),q); } -void dot(frame f, path3 g, material p=currentpen, +void dot(frame f, triple[] v, material p=currentpen, light light=nolight, + string name="", render render=defaultrender, + projection P=currentprojection) +{ + if(v.length > 0) { + // Remove duplicate points. + v=sort(v,lexorder); + + triple last=v[0]; + dot(f,last,p,light,name,P); + for(int i=1; i < v.length; ++i) { + triple V=v[i]; + if(V != last) { + dot(f,V,p,light,name,render,P); + last=V; + } + } + } +} + +void dot(frame f, path3 g, material p=currentpen, light light=nolight, + string name="", render render=defaultrender, projection P=currentprojection) { - for(int i=0; i <= length(g); ++i) dot(f,point(g,i),p,P); + dot(f,sequence(new triple(int i) {return point(g,i);},size(g)), + p,light,name,render,P); } -void dot(frame f, path3[] g, material p=currentpen, +void dot(frame f, path3[] g, material p=currentpen, light light=nolight, + string name="", render render=defaultrender, projection P=currentprojection) { - for(int i=0; i < g.length; ++i) dot(f,g[i],p,P); + int sum; + for(path3 G : g) + sum += size(G); + int i,j; + dot(f,sequence(new triple(int) { + while(j >= size(g[i])) { + ++i; + j=0; + } + triple v=point(g[i],j); + ++j; + return v; + },sum),p,light,name,render,P); } void dot(picture pic=currentpicture, triple v, material p=currentpen, - light light=nolight, string name="") + light light=nolight, string name="", render render=defaultrender) { pen q=(pen) p; real size=0.5*linewidth(dotsize(q)+q); pic.add(new void(frame f, transform3 t, picture pic, projection P) { + triple V=t*v; if(is3D()) { - material m=material(p,p.granularity >= 0 ? p.granularity : - dotgranularity); - int i=-1; + begingroup3(f,name == "" ? "dot" : name,render); + transform3 T=shift(V)*scale3(size); for(patch s : unitsphere.s) - draw3D(f,shift(t*v)*scale3(size)*s,m,light,partname(name,++i)); + draw3D(f,T*s,V,p,light,prc=false); + if(prc()) + drawPRCsphere(f,T,p,light,render); + endgroup3(f); } if(pic != null) - dot(pic,project(t*v,P.t),q); + dot(pic,project(V,P.t),q); },true); triple R=size*(1,1,1); pic.addBox(v,v,-R,R); } -void dot(picture pic=currentpicture, triple[] v, material p=currentpen) +void dot(picture pic=currentpicture, triple[] v, material p=currentpen, + light light=nolight, string name="", render render=defaultrender) { - for(int i=0; i < v.length; ++i) dot(pic,v[i],p); + if(v.length > 0) { + // Remove duplicate points. + v=sort(v,lexorder); + + triple last=v[0]; + begingroup3(pic,name == "" ? "dots" : name,render); + dot(pic,last,p,light,partname(0),render); + int k=0; + for(int i=1; i < v.length; ++i) { + triple V=v[i]; + if(V != last) { + dot(pic,V,p,light,partname(++k),render); + last=V; + } + } + endgroup3(pic); + } } -void dot(picture pic=currentpicture, explicit path3 g, material p=currentpen) +void dot(picture pic=currentpicture, explicit path3 g, material p=currentpen, + light light=nolight, string name="", + render render=defaultrender) { - for(int i=0; i <= length(g); ++i) dot(pic,point(g,i),p); + dot(pic,sequence(new triple(int i) {return point(g,i);},size(g)), + p,light,name,render); } -void dot(picture pic=currentpicture, path3[] g, material p=currentpen) +void dot(picture pic=currentpicture, path3[] g, material p=currentpen, + light light=nolight, string name="", render render=defaultrender) { - for(int i=0; i < g.length; ++i) dot(pic,g[i],p); + int sum; + for(path3 G : g) + sum += size(G); + int i,j; + dot(pic,sequence(new triple(int) { + while(j >= size(g[i])) { + ++i; + j=0; + } + triple v=point(g[i],j); + ++j; + return v; + },sum),p,light,name,render); } void dot(picture pic=currentpicture, Label L, triple v, align align=NoAlign, - string format=defaultformat, material p=currentpen) + string format=defaultformat, material p=currentpen, + light light=nolight, string name="", render render=defaultrender) { Label L=L.copy(); if(L.s == "") { @@ -1679,8 +1801,8 @@ void dot(picture pic=currentpicture, Label L, triple v, align align=NoAlign, } L.align(align,E); L.p((pen) p); - dot(pic,v,p); - label(pic,L,v); + dot(pic,v,p,light,name,render); + label(pic,L,v,render); } pair minbound(triple[] A, projection P) @@ -1734,7 +1856,8 @@ triple[][] operator / (triple[][] a, real[][] b) // Draw a NURBS curve. void draw(picture pic=currentpicture, triple[] P, real[] knot, - real[] weights=new real[], pen p=currentpen, string name="") + real[] weights=new real[], pen p=currentpen, string name="", + render render=defaultrender) { P=copy(P); knot=copy(knot); @@ -1742,7 +1865,9 @@ void draw(picture pic=currentpicture, triple[] P, real[] knot, pic.add(new void(frame f, transform3 t, picture pic, projection Q) { if(is3D()) { triple[] P=t*P; - draw(f,P,knot,weights,p,name); + begingroup3(f,name == "" ? "curve" : name,render); + draw(f,P,knot,weights,p); + endgroup3(f); if(pic != null) pic.addBox(minbound(P,Q),maxbound(P,Q)); } @@ -1753,7 +1878,8 @@ void draw(picture pic=currentpicture, triple[] P, real[] knot, // Draw a NURBS surface. void draw(picture pic=currentpicture, triple[][] P, real[] uknot, real[] vknot, real[][] weights=new real[][], material m=currentpen, - pen[] colors=new pen[], light light=currentlight, string name="") + pen[] colors=new pen[], light light=currentlight, string name="", + render render=defaultrender) { if(colors.length > 0) m=mean(colors); @@ -1765,14 +1891,14 @@ void draw(picture pic=currentpicture, triple[][] P, real[] uknot, real[] vknot, colors=copy(colors); pic.add(new void(frame f, transform3 t, picture pic, projection Q) { if(is3D()) { + begingroup3(f,name == "" ? "surface" : name,render); triple[][] P=t*P; - real granularity=m.granularity >= 0 ? m.granularity : - defaultgranularity; real PRCshininess; if(prc()) PRCshininess=PRCshininess(m.shininess); draw(f,P,uknot,vknot,weights,m.p,m.opacity,m.shininess,PRCshininess, - granularity,colors,lighton,name); + colors,lighton); + endgroup3(f); if(pic != null) pic.addBox(minbound(P,Q),maxbound(P,Q)); } diff --git a/Master/texmf/asymptote/three_tube.asy b/Master/texmf/asymptote/three_tube.asy index c79ae3f619f..2eb5e4cf716 100644 --- a/Master/texmf/asymptote/three_tube.asy +++ b/Master/texmf/asymptote/three_tube.asy @@ -1,5 +1,6 @@ -void render(path3 s, real granularity=linegranularity, void f(path3, real)) +void render(path3 s, void f(path3, real), render render=defaultrender) { + real granularity=render.tubegranularity; void Split(triple z0, triple c0, triple c1, triple z1, real t0=0, real t1=1, real depth=mantissaBits) { if(depth > 0) { @@ -65,8 +66,8 @@ rmf[] rmf(path3 g, real[] t) return R; } -surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, - real[] x, real[] y, bool[][] cond={}) +private real[][][] bispline0(real[][] z, real[][] p, real[][] q, real[][] r, + real[] x, real[] y, bool[][] cond={}) { // z[i][j] is the value at (x[i],y[j]) // p and q are the first derivatives with respect to x and y, respectively // r is the second derivative ddu/dxdy @@ -87,62 +88,49 @@ surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, } } - surface s=surface(count); - s.index=new int[n][m]; - int k=-1; + real[][][] s=new real[count][][]; + int k=0; for(int i=0; i < n; ++i) { + int ip=i+1; bool[] condi=all ? null : cond[i]; real xi=x[i]; real[] zi=z[i]; - real[] zp=z[i+1]; + real[] zp=z[ip]; real[] ri=r[i]; - real[] rp=r[i+1]; + real[] rp=r[ip]; real[] pi=p[i]; - real[] pp=p[i+1]; + real[] pp=p[ip]; real[] qi=q[i]; - real[] qp=q[i+1]; - real xp=x[i+1]; + real[] qp=q[ip]; + real xp=x[ip]; real hx=(xp-xi)/3; - int[] indexi=s.index[i]; for(int j=0; j < m; ++j) { real yj=y[j]; - real yp=y[j+1]; + int jp=j+1; + real yp=y[jp]; if(all || condi[j]) { - triple[][] P=array(4,array(4,O)); real hy=(yp-yj)/3; real hxy=hx*hy; - // x and y directions - for(int k=0; k < 4; ++k) { - P[0][k] += xi*X; - P[k][0] += yj*Y; - P[1][k] += (xp+2*xi)/3*X; - P[k][1] += (yp+2*yj)/3*Y; - P[2][k] += (2*xp+xi)/3*X; - P[k][2] += (2*yp+yj)/3*Y; - P[3][k] += xp*X; - P[k][3] += yp*Y; - } - // z: value - P[0][0] += zi[j]*Z; - P[3][0] += zp[j]*Z; - P[0][3] += zi[j+1]*Z; - P[3][3] += zp[j+1]*Z; - // z: first derivative - P[1][0] += (P[0][0].z+hx*pi[j])*Z; - P[1][3] += (P[0][3].z+hx*pi[j+1])*Z; - P[2][0] += (P[3][0].z-hx*pp[j])*Z; - P[2][3] += (P[3][3].z-hx*pp[j+1])*Z; - P[0][1] += (P[0][0].z+hy*qi[j])*Z; - P[3][1] += (P[3][0].z+hy*qp[j])*Z; - P[0][2] += (P[0][3].z-hy*qi[j+1])*Z; - P[3][2] += (P[3][3].z-hy*qp[j+1])*Z; - // z: second derivative - P[1][1] += (P[0][1].z+P[1][0].z-P[0][0].z+hxy*ri[j])*Z; - P[1][2] += (P[0][2].z+P[1][3].z-P[0][3].z-hxy*ri[j+1])*Z; - P[2][1] += (P[2][0].z+P[3][1].z-P[3][0].z-hxy*rp[j])*Z; - P[2][2] += (P[2][3].z+P[3][2].z-P[3][3].z+hxy*rp[j+1])*Z; - s.s[++k]=patch(P); - indexi[j]=k; + real zij=zi[j]; + real zip=zi[jp]; + real zpj=zp[j]; + real zpp=zp[jp]; + real pij=hx*pi[j]; + real ppj=hx*pp[j]; + real qip=hy*qi[jp]; + real qpp=hy*qp[jp]; + real zippip=zip+hx*pi[jp]; + real zppmppp=zpp-hx*pp[jp]; + real zijqij=zij+hy*qi[j]; + real zpjqpj=zpj+hy*qp[j]; + + s[k]=new real[][] {{zij,zijqij,zip-qip,zip}, + {zij+pij,zijqij+pij+hxy*ri[j], + zippip-qip-hxy*ri[jp],zippip}, + {zpj-ppj,zpjqpj-ppj-hxy*rp[j], + zppmppp-qpp+hxy*rp[jp],zppmppp}, + {zpj,zpjqpj,zpp-qpp,zpp}}; + ++k; } } } @@ -150,11 +138,11 @@ surface bispline(real[][] z, real[][] p, real[][] q, real[][] r, return s; } -// return the surface described by a real matrix f, interpolated with +// return the surface values described by a real matrix f, interpolated with // xsplinetype and ysplinetype. -surface surface(real[][] f, real[] x, real[] y, - splinetype xsplinetype=null, splinetype ysplinetype=xsplinetype, - bool[][] cond={}) +real[][][] bispline(real[][] f, real[] x, real[] y, + splinetype xsplinetype=null, + splinetype ysplinetype=xsplinetype, bool[][] cond={}) { real epsilon=sqrtEpsilon*norm(y); if(xsplinetype == null) @@ -176,9 +164,7 @@ surface surface(real[][] f, real[] x, real[] y, real[][] p=transpose(tp); for(int i=0; i < n; ++i) r[i]=clamped(d1[i],d2[i])(y,p[i]); - surface s=bispline(f,p,q,r,x,y,cond); - if(xsplinetype == periodic) s.ucyclic(true); - if(ysplinetype == periodic) s.vcyclic(true); + real[][][] s=bispline0(f,p,q,r,x,y,cond); return s; } @@ -248,11 +234,11 @@ surface surface(triple f(pair z), real[] u, real[] v, vperiodic(fz) ? periodic : notaknot}; } else if(vsplinetype.length != 3) abort("vsplinetype must have length 3"); - surface sx=surface(fx,ipt,jpt,usplinetype[0],vsplinetype[0],active); - surface sy=surface(fy,ipt,jpt,usplinetype[1],vsplinetype[1],active); - surface sz=surface(fz,ipt,jpt,usplinetype[2],vsplinetype[2],active); + real[][][] sx=bispline(fx,ipt,jpt,usplinetype[0],vsplinetype[0],active); + real[][][] sy=bispline(fy,ipt,jpt,usplinetype[1],vsplinetype[1],active); + real[][][] sz=bispline(fz,ipt,jpt,usplinetype[2],vsplinetype[2],active); - surface s=surface(sx.s.length); + surface s=surface(sx.length); s.index=new int[nu][nv]; int k=-1; for(int i=0; i < nu; ++i) { @@ -261,12 +247,20 @@ surface surface(triple f(pair z), real[] u, real[] v, indexi[j]=++k; } - for(int k=0; k < sx.s.length; ++k) { + for(int k=0; k < sx.length; ++k) { triple[][] Q=new triple[4][]; - for(int i=0; i < 4 ; ++i) - Q[i]=sequence(new triple(int j) { - return (sx.s[k].P[i][j].z,sy.s[k].P[i][j].z,sz.s[k].P[i][j].z); - },4); + real[][] Px=sx[k]; + real[][] Py=sy[k]; + real[][] Pz=sz[k]; + for(int i=0; i < 4 ; ++i) { + real[] Pxi=Px[i]; + real[] Pyi=Py[i]; + real[] Pzi=Pz[i]; + Q[i]=new triple[] {(Pxi[0],Pyi[0],Pzi[0]), + (Pxi[1],Pyi[1],Pzi[1]), + (Pxi[2],Pyi[2],Pzi[2]), + (Pxi[3],Pyi[3],Pzi[3])}; + } s.s[k]=patch(Q); } @@ -282,8 +276,8 @@ surface surface(triple f(pair z), real[] u, real[] v, path3 interp(path3 a, path3 b, real t) { int n=size(a); - return path3(sequence(new triple(int i) {return interp(precontrol(a,i), - precontrol(b,i),t);},n), + return path3(sequence(new triple(int i) { + return interp(precontrol(a,i),precontrol(b,i),t);},n), sequence(new triple(int i) {return interp(point(a,i),point(b,i),t);},n), sequence(new triple(int i) {return interp(postcontrol(a,i), postcontrol(b,i),t);},n), @@ -294,12 +288,15 @@ path3 interp(path3 a, path3 b, real t) struct tube { surface s; - path3 center; + path3 center; // tube axis - void operator init(path3 p, real width, int sectors=4, - real granularity=linegranularity) { - sectors += sectors % 2; // Must be even. - int h=quotient(sectors,2); + void Null(transform3) {} + void Null(transform3, bool) {} + + void operator init(path3 p, real width, render render=defaultrender, + void cylinder(transform3)=Null, + void sphere(transform3, bool half)=Null, + void tube(path3, path3)=null) { real r=0.5*width; void generate(path3 p) { @@ -308,31 +305,41 @@ struct tube for(int i=0; i < n; ++i) { triple v=point(p,i); triple u=point(p,i+1)-v; - s.append(shift(v)*align(unit(u))*scale(r,r,abs(u))*unitcylinder); + transform3 t=shift(v)*align(unit(u))*scale(r,r,abs(u)); + s.append(t*unitcylinder); + cylinder(t); } center=center&p; } else { real[] T; path3 G; for(int i=0; i < n; ++i) - render(subpath(p,i,i+1),granularity, + render(subpath(p,i,i+1), new void(path3 g, real s) { G=G&g; T.push(i+s); - }); + },render); T.push(n); T.cyclic=cyclic(p); rmf[] rmf=rmf(p,T); triple f(pair t) { rmf R=rmf[round(t.x)]; - return point(G,t.x)+r*(R.r*cos(t.y)-R.s*sin(t.y)); + int n=round(t.y); + static real[] x={1,0,-1,0}; + static real[] y={0,1,0,-1}; + return point(G,t.x)+r*(R.r*x[n]-R.s*y[n]); } - real[] v=uniform(0,2pi,sectors); + static real[] v={0,1,2,3,0}; + static real[] circular(real[] x, real[] y) { + static real a=8/3*(sqrt(2)-1); + return a*periodic(x,y); + } + static splinetype[] Monotonic={monotonic,monotonic,monotonic}; - static splinetype[] Periodic={periodic,periodic,periodic}; + static splinetype[] Circular={circular,circular,circular}; if(T.length > 0) { - surface S=surface(f,sequence(T.length),v,Monotonic,Periodic); + surface S=surface(f,sequence(T.length),v,Monotonic,Circular); s.append(S); // Compute center of tube: @@ -341,19 +348,52 @@ struct tube triple[] pre=new triple[n+1]; triple[] point=new triple[n+1]; triple[] post=new triple[n+1]; + int[] index=S.index[0]; - pre[0]=point[0]=0.5*(S.s[index[0]].P[0][0]+S.s[index[h]].P[0][0]); + triple Point; + for(int m=0; m < 4; ++m) + Point += S.s[index[m]].P[0][0]; + pre[0]=point[0]=0.25*Point; + for(int i=0; i < n; ++i) { index=S.index[i]; - triple [][] P=S.s[index[0]].P; - triple [][] Q=S.s[index[h]].P; - post[i]=0.5*(P[1][0]+Q[1][0]); - pre[i+1]=0.5*(P[2][0]+Q[2][0]); - point[i+1]=0.5*(P[3][0]+Q[3][0]); + triple Pre,Point,Post; + for(int m=0; m < 4; ++m) { + triple [][] P=S.s[index[m]].P; + Post += P[1][0]; + Pre += P[2][0]; + Point += P[3][0]; + } + post[i]=0.25*Post; + pre[i+1]=0.25*Pre; + point[i+1]=0.25*Point; + } + index=S.index[n-1]; - post[n]=0.5*(S.s[index[0]].P[3][0]+S.s[index[h]].P[3][0]); - center=center&path3(pre,point,post,array(n+1,false),T.cyclic); + triple Post; + for(int m=0; m < 4; ++m) + Post += S.s[index[m]].P[3][0]; + post[n]=0.25*Post; + + bool[] b=array(n+1,false); + path3 Center=path3(pre,point,post,b,T.cyclic); + center=center&Center; + + if(tube != null) { // Compute path along tube + triple[] pre=new triple[n+1]; + triple[] point=new triple[n+1]; + triple[] post=new triple[n+1]; + pre[0]=point[0]=S.s[S.index[0][0]].P[0][0]; + for(int i=0; i < n; ++i) { + triple [][] P=S.s[S.index[i][0]].P; + post[i]=P[1][0]; + pre[i+1]=P[2][0]; + point[i+1]=P[3][0]; + } + post[n]=S.s[S.index[n-1][0]].P[3][0]; + tube(Center,path3(pre,point,post,b,T.cyclic)); + } } } } @@ -363,11 +403,16 @@ struct tube int begin=0; int n=length(p); for(int i=cyclic ? 0 : 1; i < n; ++i) - if(abs(dir(p,i,1)-dir(p,i,-1)) > sqrtEpsilon) { - generate(subpath(p,begin,i)); - s.append(shift(point(p,i))*t*align(dir(p,i,-1))*unithemisphere); - begin=i; - } + if(abs(dir(p,i,1)-dir(p,i,-1)) > sqrtEpsilon) { + generate(subpath(p,begin,i)); + triple dir=dir(p,i,-1); + s.append(shift(point(p,i))*t*align(dir)* + (dir != O ? unithemisphere : unitsphere)); + int L=length(center); + sphere(shift(point(center,L))*t*align(dir(center,L,-1)), + half=straight(p,i-1) && straight(p,i)); + begin=i; + } generate(subpath(p,begin,n)); } } diff --git a/Master/texmf/asymptote/version.asy b/Master/texmf/asymptote/version.asy index 15dbe2fe25b..12b1e9bbad3 100644 --- a/Master/texmf/asymptote/version.asy +++ b/Master/texmf/asymptote/version.asy @@ -1 +1 @@ -string VERSION="1.94"; +string VERSION="1.96"; diff --git a/Master/texmf/doc/asymptote/CAD.pdf b/Master/texmf/doc/asymptote/CAD.pdf Binary files differindex ee2b6692e8f..4406335c391 100644 --- a/Master/texmf/doc/asymptote/CAD.pdf +++ b/Master/texmf/doc/asymptote/CAD.pdf diff --git a/Master/texmf/doc/asymptote/asymptote.pdf b/Master/texmf/doc/asymptote/asymptote.pdf Binary files differindex 699a02f61b2..0bd7a54892d 100644 --- a/Master/texmf/doc/asymptote/asymptote.pdf +++ b/Master/texmf/doc/asymptote/asymptote.pdf diff --git a/Master/texmf/doc/asymptote/examples/100d.views b/Master/texmf/doc/asymptote/examples/100d.views index b3a1be12936..5e73cb0c8b9 100644 --- a/Master/texmf/doc/asymptote/examples/100d.views +++ b/Master/texmf/doc/asymptote/examples/100d.views @@ -1,3 +1,30 @@ -{0 0 -14.425469398498535}{0 0 1}{14.425469398498535}{}{27.905145957890003} -{0.3336401879787445 -0.0024074832908809185 -14.015975952148438}{-0.7636404037475586 -0.17614173889160156 0.6211501359939575}{15.868016873340485}{-58.88738872302071}{27.905145957890003} -[Arbitrary Label]{0.3336401879787445 -0.0024074832908809185 -14.015975952148438}{-0.8299760222434998 0.19688645005226135 -0.5218961238861084}{15.868016035928465}{-94.62674045286937}{27.905145957890003} +VIEW%={View A} + COO=0.000001944790710695088 -0.000000199754154551 -303.740966796875 + C2C=-0.43931567668914795 -0.011656288057565689 0.8982571363449097 + ROO=367.52660744556164 + ROLL=-75.86431813030065 + AAC=34.903342413559436 + BGCOLOR=1. 1. 1. + LIGHTS=Artwork + RENDERMODE=Solid +END +VIEW%={View B} + COO=-52.16141891479492 50.85958480834961 -249.23748779296875 + C2C=-0.0608830563724041 0.722907543182373 -0.6882571578025818 + ROO=117.10558117788756 + ROLL=105.68252665017765 + AAC=34.903342413559436 + BGCOLOR=1. 1. 1. + LIGHTS=Artwork + RENDERMODE=Solid +END +VIEW%={View C} + COO=2.2545230388641357 2.9914066791534424 -300.3456115722656 + C2C=0.8536049127578735 0.3032689690589905 -0.42354053258895874 + ROO=303.7410359852936 + ROLL=-126.08445879535664 + AAC=34.903342413559436 + BGCOLOR=1. 1. 1. + LIGHTS=Artwork + RENDERMODE=Solid +END diff --git a/Master/texmf/doc/asymptote/examples/BezierSurface.asy b/Master/texmf/doc/asymptote/examples/BezierSurface.asy index bf386baf7e5..f8cbc458ca0 100644 --- a/Master/texmf/doc/asymptote/examples/BezierSurface.asy +++ b/Master/texmf/doc/asymptote/examples/BezierSurface.asy @@ -1,8 +1,13 @@ import three; -string viewpoint="{-24.132780075073242 7.2992024421691895 7.695427417755127}{0.8244762420654297 -0.563306450843811 0.0540805421769619}{35.62141440580922}{17.392748820528627}{}"; +string viewpoint=" +COO=-684.0787963867188 206.90650939941406 218.13809204101562 +C2C=0.8244762420654297 -0.563306450843811 0.0540805421769619 +ROO=1009.7407942621448 +ROLL=17.39344555165265 +"; -//viewpoint=getstring("viewpoint",viewpoint); +// viewpoint=getstring("viewpoint",viewpoint); currentprojection=perspective(viewpoint); triple[][][] P={ diff --git a/Master/texmf/doc/asymptote/examples/Klein.asy b/Master/texmf/doc/asymptote/examples/Klein.asy index 0d31c495f01..b2f6d1b0e79 100644 --- a/Master/texmf/doc/asymptote/examples/Klein.asy +++ b/Master/texmf/doc/asymptote/examples/Klein.asy @@ -22,7 +22,7 @@ triple f(pair t) { } surface s=surface(f,(0,0),(2pi,2pi),8,8,Spline); -draw(s,lightolive+white); +draw(s,lightolive+white,"bottle"); string lo="$\displaystyle u\in[0,\pi]: \cases{x=3\cos u(1+\sin u)+(2-\cos u)\cos u\cos v,\cr y=8\sin u+(2-\cos u)\sin u\cos v,\cr @@ -34,11 +34,18 @@ z=(2-\cos u)\sin v.\cr}$"; real h=0.0125; -draw(surface(xscale(-0.38)*yscale(-0.18)*lo,s,0,1.7,h,bottom=false)); -draw(surface(xscale(0.26)*yscale(0.1)*rotate(90)*hi,s,4.9,1.4,h,bottom=false)); +begingroup3("parametrization"); +draw(surface(xscale(-0.38)*yscale(-0.18)*lo,s,0,1.7,h,bottom=false), + "[0,pi]"); +draw(surface(xscale(0.26)*yscale(0.1)*rotate(90)*hi,s,4.9,1.4,h,bottom=false), + "[pi,2pi]"); +endgroup3(); + +begingroup3("boundary"); draw(s.uequals(0),blue+dashed); draw(s.uequals(pi),blue+dashed); +endgroup3(); add(new void(frame f, transform3 t, picture pic, projection P) { - draw(f,invert(box(min(f,P),max(f,P)),P)); + draw(f,invert(box(min(f,P),max(f,P)),P),"frame"); }); diff --git a/Master/texmf/doc/asymptote/examples/NURBSsphere.asy b/Master/texmf/doc/asymptote/examples/NURBSsphere.asy index d7f0e77321d..5258c9986de 100644 --- a/Master/texmf/doc/asymptote/examples/NURBSsphere.asy +++ b/Master/texmf/doc/asymptote/examples/NURBSsphere.asy @@ -1,32 +1,46 @@ import three; -size(400); +/* Reference: +@article{Qin97, + title={{Representing quadric surfaces using NURBS surfaces}}, + author={Qin, K.}, + journal={Journal of Computer Science and Technology}, + volume={12}, + number={3}, + pages={210--216}, + year={1997}, + publisher={Springer} +} +*/ + +size(10cm); currentprojection=perspective(5,4,2,autoadjust=false); -real[] uknot={0,0,0,1,1,2,2,3,3,4,4,4}; - -real[] vknot={0,0,0,1,1,2,2,2}; - -triple[][] P={{(0,0,1),(1,0,1),(1,0,0),(1,0,-1),(0,0,-1)}, - {(0,0,1),(1,1,1),(1,1,0),(1,1,-1),(0,0,-1)}, - {(0,0,1),(0,1,1),(0,1,0),(0,1,-1),(0,0,-1)}, - {(0,0,1),(-1,1,1),(-1,1,0),(-1,1,-1),(0,0,-1)}, - {(0,0,1),(-1,0,1),(-1,0,0),(-1,0,-1),(0,0,-1)}, - {(0,0,1),(-1,-1,1),(-1,-1,0),(-1,-1,-1),(0,0,-1)}, - {(0,0,1),(0,-1,1),(0,-1,0),(0,-1,-1),(0,0,-1)}, - {(0,0,1),(1,-1,1),(1,-1,0),(1,-1,-1),(0,0,-1)}, - {(0,0,1),(1,0,1),(1,0,0),(1,0,-1),(0,0,-1)}}; - -real[][] weights={ - {1,1,2,1,1}, - {1,1,2,1,1}, - {2,2,4,2,2}, - {1,1,2,1,1}, - {1,1,2,1,1}, - {1,1,2,1,1}, - {2,2,4,2,2}, - {1,1,2,1,1}, - {1,1,2,1,1} -}; - -draw(P,uknot,vknot,weights,yellow); +// udegree=2, vdegree=3, nu=3, nv=4; + +real[] W={2/3,1/3,1}; +real[] w={1,1/3,1/3,1}; + +// 10 distinct control points +triple[][] P={{(0,0,1),(-2,-2,1),(-2,-2,-1),(0,0,-1)}, + {(0,0,1),(2,-2,1),(2,-2,-1),(0,0,-1)}, + {(0,0,1),(2,2,1),(2,2,-1),(0,0,-1)}, + {(0,0,1),(-2,2,1),(-2,2,-1),(0,0,-1)}}; + +P.cyclic=true; + +real[][] weights=new real[3][4]; +for(int i=0; i < 3; ++i) +for(int j=0; j < 4; ++j) + weights[i][j]=W[i]*w[j]; + +real[] uknot={0,0,1/3,1/2,1,1}; +real[] vknot={0,0,0,0,1,1,1,1}; + +int N=1; + +for(int k=0; k < N; ++k) +for(int i=0; i < 4; ++i) + draw(shift(k*Z)*P[i:i+3],uknot,vknot,weights,blue); + +// draw(unitsphere,red+opacity(0.1)); diff --git a/Master/texmf/doc/asymptote/examples/cube.asy b/Master/texmf/doc/asymptote/examples/cube.asy index 436e1e2729f..acfecfdd7d4 100644 --- a/Master/texmf/doc/asymptote/examples/cube.asy +++ b/Master/texmf/doc/asymptote/examples/cube.asy @@ -1,5 +1,4 @@ import three; -dotgranularity=0; // Render dots as spheres. currentprojection=orthographic(5,4,2,center=true); diff --git a/Master/texmf/doc/asymptote/examples/join3.asy b/Master/texmf/doc/asymptote/examples/join3.asy index 62d5faaaee6..9513d522b4d 100644 --- a/Master/texmf/doc/asymptote/examples/join3.asy +++ b/Master/texmf/doc/asymptote/examples/join3.asy @@ -15,10 +15,7 @@ path3 p=z[0]..z[1]---z[2]::{Y}z[3] &z[3]..z[4]--z[5]::{Y}z[6] &z[6]::z[7]---z[8]..{Y}z[9]; -draw(p,grey+linewidth(4mm)+opacity(0.5)); +draw(p,grey+linewidth(4mm),currentlight); xaxis3(Label(XY()*"$x$",align=-3Y),red,above=true); yaxis3(Label(XY()*"$y$",align=-3X),red,above=true); - -dot(z); - diff --git a/Master/texmf/doc/asymptote/examples/label3zoom.asy b/Master/texmf/doc/asymptote/examples/label3zoom.asy new file mode 100644 index 00000000000..7eafccd8fcd --- /dev/null +++ b/Master/texmf/doc/asymptote/examples/label3zoom.asy @@ -0,0 +1,16 @@ +import three; + +currentlight=Headlamp; +size(469.75499pt,0); + +currentprojection=perspective( +camera=(160.119024441391,136.348802919248,253.822628496226), +up=(-0.188035408976828,0.910392236102215,-0.368549401594584), +target=(25.5462739598034,1.77605243766079,-9.93996244768584), +zoom=5.59734733413271, +angle=5.14449021168139, +viewportshift=(0.813449720559684,-0.604674743165144), +autoadjust=false); + +draw(scale3(4)*extrude("$\displaystyle\int\limits_{-\infty}^{+\infty}\!\! e^{-\alpha x^2}\!\!=\sqrt{\frac{\pi}{\alpha}}$",2Z), + material(blue,ambientpen=mediumgray)); diff --git a/Master/texmf/doc/asymptote/examples/latexusage.tex b/Master/texmf/doc/asymptote/examples/latexusage.tex index f073f80258f..bc0638098c2 100644 --- a/Master/texmf/doc/asymptote/examples/latexusage.tex +++ b/Master/texmf/doc/asymptote/examples/latexusage.tex @@ -7,7 +7,7 @@ %\usepackage[inline]{asymptote} % Enable this line to support PDF hyperlinks: -%\usepackage[setpagesize=false]{hyperref} +%\usepackage{hyperref}\hypersetup{setpagesize=false} % Enable this line for PDF attachments with asy environment option attach=true: %\usepackage[dvips]{attachfile2} @@ -81,6 +81,7 @@ the \verb+{attach=true}+ option: \begin{center} \begin{asy}[height=4cm,attach=false] import three; +defaultrender.margin=3pt; currentprojection=orthographic(5,4,2); draw(unitcube,blue); label("$V-E+F=2$",(0,1,0.5),3Y,blue+fontsize(17pt)); diff --git a/Master/texmf/doc/asymptote/examples/parametricsurface.asy b/Master/texmf/doc/asymptote/examples/parametricsurface.asy index f78e8470658..de669b59faf 100644 --- a/Master/texmf/doc/asymptote/examples/parametricsurface.asy +++ b/Master/texmf/doc/asymptote/examples/parametricsurface.asy @@ -14,10 +14,10 @@ pen p=rgb(0.2,0.5,0.7); surface s=surface(f,(0,0),(2pi,2pi),8,8,Spline); // surface only -draw(s,lightgray); +//draw(s,lightgray); // mesh only // draw(s,nullpen,meshpen=p); // surface & mesh -// draw(s,lightgray,meshpen=p); +draw(s,lightgray,meshpen=p); diff --git a/Master/texmf/doc/asymptote/examples/pdb.asy b/Master/texmf/doc/asymptote/examples/pdb.asy index e06b1241bce..b4f9175ae14 100644 --- a/Master/texmf/doc/asymptote/examples/pdb.asy +++ b/Master/texmf/doc/asymptote/examples/pdb.asy @@ -9,12 +9,12 @@ bool getviews=true; currentlight=White; //currentlight=nolight; +defaultrender.merge=true; // Fast low-quality rendering +//defaultrender.merge=false; // Slow high-quality rendering + size(200); currentprojection=perspective(30,30,15); -// Uncomment this line for more accurate (but slower) PDF rendering -//dotgranularity=0; - pen chainpen=green; pen hetpen=purple; @@ -121,6 +121,7 @@ while(true) { write("Number of atomic chains: ",chains.length); int natoms; +begingroup3("chained"); for(chain c : chains) { for(int i=0; i < c.a.length-1; ++i) draw(c.a[i].v--c.a[i+1].v,chainpen,currentlight); @@ -128,25 +129,30 @@ for(chain c : chains) { dot(a.v,color(a.name),currentlight); natoms += c.a.length; } +endgroup3(); write("Number of chained atoms: ",natoms); write("Number of hetero atoms: ",atoms.length); +begingroup3("hetero"); for(atom h : atoms) dot(h.v,color(h.name),currentlight); +endgroup3(); write("Number of hetero bonds: ",bonds.length); +begingroup3("bonds"); for(bond b : bonds) { triple v(int i) {return atoms[find(serials == i)].v;} draw(v(b.i)--v(b.j),hetpen,currentlight); } +endgroup3(); string options; string viewfilename=prefix+".views"; if(!error(input(viewfilename,check=false))) - options="3Dviews="+viewfilename; + options="3Dviews2="+viewfilename; if(getviews) { picture pic; @@ -155,3 +161,4 @@ if(getviews) { shipout(prefix,pic,options=options); } else shipout(prefix,options=options); + diff --git a/Master/texmf/doc/asymptote/examples/pipeintersection.asy b/Master/texmf/doc/asymptote/examples/pipeintersection.asy index d65b8b562ea..5bf9cfbe6f3 100644 --- a/Master/texmf/doc/asymptote/examples/pipeintersection.asy +++ b/Master/texmf/doc/asymptote/examples/pipeintersection.asy @@ -9,4 +9,4 @@ real f(pair z) {return min(sqrt(1-z.x^2),sqrt(1-z.y^2));} surface s=surface(f,(0,0),(1,1),40,Spline); transform3 t=rotate(90,O,Z), t2=t*t, t3=t2*t, i=xscale3(-1)*zscale3(-1); -draw(surface(s,t*s,t2*s,t3*s,i*s,i*t*s,i*t2*s,i*t3*s),blue); +draw(surface(s,t*s,t2*s,t3*s,i*s,i*t*s,i*t2*s,i*t3*s),blue,render(merge=true)); diff --git a/Master/texmf/doc/asymptote/examples/sphere.asy b/Master/texmf/doc/asymptote/examples/sphere.asy index 8c5a444d01a..41f3f548895 100644 --- a/Master/texmf/doc/asymptote/examples/sphere.asy +++ b/Master/texmf/doc/asymptote/examples/sphere.asy @@ -3,4 +3,4 @@ import three; size(200); currentprojection=orthographic(5,4,3); -draw(unitsphere,green); +draw(unitsphere,green,render(compression=Zero)); diff --git a/Master/texmf/doc/info/asy-faq.info b/Master/texmf/doc/info/asy-faq.info index 32b8053f241..efd60036acc 100644 --- a/Master/texmf/doc/info/asy-faq.info +++ b/Master/texmf/doc/info/asy-faq.info @@ -9,7 +9,7 @@ END-INFO-DIR-ENTRY File: $prefix.info, Node: Top, Next: Question 1.1, Up: (dir) ASYMPTOTE FREQUENTLY ASKED QUESTIONS - 04 May 2010 + 06 Jun 2010 This is the list of Frequently Asked Questions about Asymptote (asy). diff --git a/Master/texmf/doc/info/asymptote.info b/Master/texmf/doc/info/asymptote.info index aa24a4f977a..b8497480d4c 100644 --- a/Master/texmf/doc/info/asymptote.info +++ b/Master/texmf/doc/info/asymptote.info @@ -1,7 +1,7 @@ This is asymptote.info, produced by makeinfo version 4.13 from ../asymptote.texi. -This file documents `Asymptote', version 1.94. +This file documents `Asymptote', version 1.96. `http://asymptote.sourceforge.net' @@ -23,7 +23,7 @@ File: asymptote.info, Node: Top, Next: Description, Up: (dir) Asymptote ********* -This file documents `Asymptote', version 1.94. +This file documents `Asymptote', version 1.96. `http://asymptote.sourceforge.net' @@ -793,7 +793,6 @@ the module `three.asy' to construct the edges of a cube `unitbox' without retracing steps (*note three::): import three; -dotgranularity=0; // Render dots as spheres. currentprojection=orthographic(5,4,2,center=true); @@ -3023,7 +3022,6 @@ initializers, as in `real x=2*sin(pi/2);'. A variable is not added to the namespace until after the initializer is evaluated, so for example, in - int x=2; int x=5*x; the `x' in the initializer on the second line refers to the variable @@ -3064,7 +3062,6 @@ giving it a value. The default initializer for any type `T' can be redeclared by defining the function `T operator init()'. For instance, `int' variables are usually initialized to zero, but in - int operator init() { return 3; } @@ -3075,6 +3072,17 @@ illustrative purposes; redeclaring the initializers of built-in types is not recommended. Typically, `operator init' is used to define sensible defaults for user-defined types. + The special type `var' may be used to infer the type of a variable +from its initializer. If the initializer is an expression of a unique +type, then the variable will be defined with that type. For instance, +var x=5; +var y=4.3; +var reddash=red+dashed; + is equivalent to +int x=5; +real y=4.3; +pen reddash=red+dashed; + File: asymptote.info, Node: Structures, Next: Operators, Prev: Variable initializers, Up: Programming @@ -3092,7 +3100,6 @@ structure. Any code at the top-level scope within the structure is executed on initialization. Variables hold references to structures. That is, in the example: - struct T { int x; } @@ -3111,7 +3118,6 @@ will also be equal to `5'. and returns a reference to that instance. In creating the new instance, any code in the body of the record definition is executed. For example: - int Tcount=0; struct T { int x; @@ -3143,7 +3149,6 @@ initialized to a new instance (`new T') by default. During the definition of the structure, however, variables of type `T' are initialized to `null' by default. This special behaviour is to avoid infinite recursion of creating new instances in code such as - struct tree { int value; tree left; @@ -3151,7 +3156,6 @@ struct tree { } Here is a simple example that illustrates the use of structures: - struct S { real a=1; real f(real a) {return a+this.a;} @@ -3172,7 +3176,6 @@ write((s+s).f(0)); // Outputs 2 It is often convenient to have functions that construct new instances of a structure. Say we have a `Person' structure: - struct Person { string firstname; string lastname; @@ -3187,7 +3190,6 @@ effort than creating a new person in real life, though). We can reduce the work by defining a constructor function `Person(string,string)': - struct Person { string firstname; string lastname; @@ -3205,7 +3207,6 @@ Person joe=Person.Person("Joe", "Jones"); While it is now easier than before to create a new instance, we still have to refer to the constructor by the qualified name `Person.Person'. If we add the line - from Person unravel Person; immediately after the structure definition, then the constructor can be used without qualification: `Person joe=Person("Joe", "Jones");'. @@ -3233,7 +3234,6 @@ structure. That is, it essentially defines the following constructor after the end of the structure definition, so that it can used subsequently without qualifying it by the structure name. Our `Person' example can thus be implemented as: - struct Person { string firstname; string lastname; @@ -3998,10 +3998,9 @@ of type `T[]'. `int search(T[] a, T key)' For built-in ordered types `T', searches a sorted ordered array - `a' of `n' elements to find an interval containing `key', - returning `-1' if `key' is less than the first element, `n-1' if - `key' is greater than or equal to the last element, and otherwise - the index corresponding to the left-hand (smaller) endpoint. + `a' of `n' elements for k, returning the index `i' if `a[i] <= key + < a[i+1]', `-1' if `key' is less than all elements of `a', or + `n-1' if `key' is greater than or equal to the last element of `a'. `T[] copy(T[] a)' returns a copy of the array `a'; @@ -4243,7 +4242,6 @@ Asymptote allows a section of an array to be addressed as a slice using a Python-like syntax. If `A' is an array, the expression `A[m:n]' returns a new array consisting of the elements of `A' with indices from `m' up to but not including `n'. For example, - int[] x={0,1,2,3,4,5,6,7,8,9}; int[] y=x[2:6]; // y={2,3,4,5}; int[] z=x[5:10]; // z={5,6,7,8,9}; @@ -4252,7 +4250,6 @@ int[] z=x[5:10]; // z={5,6,7,8,9}; index is omitted it is taken to be the length of the array. If both are omitted, the slice then goes from the start of the array to the end, producing a non-cyclic deep copy of the array. For example: - int[] x={0,1,2,3,4,5,6,7,8,9}; int[] y=x[:4]; // y={0,1,2,3} int[] z=x[5:]; // z={5,6,7,8,9} @@ -4287,7 +4284,6 @@ will yield an error. array. If the array being assigned to the slice has a different length than the slice itself, elements will be inserted or removed from the array to accommodate it. For instance: - string[] toppings={"mayo", "salt", "ham", "lettuce"}; toppings[0:2]=new string[] {"mustard", "pepper"}; // Now toppings={"mustard", "pepper", "ham", "lettuce"} @@ -4337,7 +4333,6 @@ function calls with possible function signatures. Implicit casting can be inhibited by declaring individual arguments `explicit' in the function signature, say to avoid an ambiguous function call in the following example, which outputs 0: - int f(pair a) {return 0;} int f(explicit real x) {return 1;} @@ -4405,7 +4400,6 @@ from graph access axes; subsequently, one can just write `axes()'. If the given name is overloaded, all types and variables of that name are added. To add more than one name, just use a comma-separated list: - from graph access axes, xaxis, yaxis; Wild card notation can be used to add all non-private fields and types of a module to the local name space: @@ -4414,7 +4408,6 @@ from graph access *; Similarly, one can add the non-private fields and types of a structure to the local environment with the `unravel' keyword: - struct matrix { real a,b,c,d; } @@ -4453,7 +4446,6 @@ same name as local functions defined later. To rename modules or fields when adding them to the local environment, use `as': - access graph as graph2d; from graph access xaxis as xline, yaxis as yline; @@ -4590,7 +4582,6 @@ implementation of exponentiation. Loop constructs allocate a new frame in every iteration. This is so that higher-order functions can refer to variables of a specific iteration of a loop: - void f(); for(int i=0; i < 10; ++i) { int x=i; @@ -4604,7 +4595,6 @@ f(); will write `5'. If a variable in a loop is declared static, it will be allocated where the enclosing function or structure was defined (just as if it were declared static outside of the loop). For instance, in: - void f() { static int x; for(int i=0; i < 10; ++i) { @@ -4659,7 +4649,6 @@ asy latexusage latex latexusage or - pdflatex latexusage asy latexusage pdflatex latexusage @@ -4706,7 +4695,7 @@ and `LaTeX' is available at `http://dario.dse.nl/projects/asylatex/'. %\usepackage[inline]{asymptote} % Enable this line to support PDF hyperlinks: -%\usepackage[setpagesize=false]{hyperref} +%\usepackage{hyperref}\hypersetup{setpagesize=false} % Enable this line for PDF attachments with asy environment option attach=true: %\usepackage[dvips]{attachfile2} @@ -4780,6 +4769,7 @@ the \verb+{attach=true}+ option: \begin{center} \begin{asy}[height=4cm,attach=false] import three; +defaultrender.margin=3pt; currentprojection=orthographic(5,4,2); draw(unitcube,blue); label("$V-E+F=2$",(0,1,0.5),3Y,blue+fontsize(17pt)); @@ -4952,6 +4942,15 @@ useful functions such as a[j]', or if `strict=true', whether `i > j' implies implies `a[i] > a[j]'. +`int unique(real[] a, real x)' + if the sorted array `a' does not contain `x', insert it + sequentially, returning the index of `x' in the resulting array. + +`bool lexorder(pair a, pair b)' + returns the lexicographical partial order of `a' and `b'. + +`bool lexorder(triple a, triple b)' + returns the lexicographical partial order of `a' and `b'. File: asymptote.info, Node: interpolate, Next: geometry, Prev: math, Up: Base modules @@ -6591,13 +6590,17 @@ containing an array of Bezier patches. Surfaces may drawn with one of the routines void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, material surfacepen=currentpen, pen meshpen=nullpen, - light light=currentlight, light meshlight=light, string name=""); + light light=currentlight, light meshlight=light, string name="", + render render=defaultrender); void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, material[] surfacepen, pen meshpen, - light light=currentlight, light meshlight=light, string name=""); + light light=currentlight, light meshlight=light, string name="", + render render=defaultrender); void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1, material[] surfacepen, pen[] meshpen=nullpens, - light light=currentlight, light meshlight=light, string name=""); + light light=currentlight, light meshlight=light, string name="", + render render=defaultrender); + The parameters `nu' and `nv' specify the number of subdivisions for drawing optional mesh lines for each Bezier patch. The optional `name' parameter is used as a prefix for naming the surface patches in the PRC @@ -6606,13 +6609,14 @@ struct material { pen[] p; // diffusepen,ambientpen,emissivepen,specularpen real opacity; real shininess; - real granularity; ... } These material properties are used to implement `OpenGL'-style lighting, based on the Phong-Blinn specular model. Sample Bezier surfaces are contained in the example files `BezierSurface.asy', -`teapot.asy', and `parametricsurface.asy'. +`teapot.asy', and `parametricsurface.asy'. The structure `render' +contains specialized rendering options documented at the beginning of +module `three.asy'. The examples `elevation.asy' and `sphericalharmonic.asy' illustrate how to draw a surface with patch-dependent colors. The examples @@ -6646,7 +6650,7 @@ bounded by cyclic paths of length `4' or less. Arbitrary thick three-dimensional curves and line caps (which the `OpenGL' standard does not require implementations to provide) are constructed with -tube tube(path3 p, real width, real granularity=tubegranularity); +tube tube(path3 p, real width, render render=defaultrender); this returns a tube structure representing a tube of diameter `width' centered approximately on `g'. The tube structure consists of a surface `s' and the actual tube center, path3 `center'. Drawing thick lines as @@ -7002,14 +7006,14 @@ TeX Labels are drawn as Bezier surfaces directly on the projection plane: void label(picture pic=currentpicture, Label L, triple position, align align=NoAlign, pen p=currentpen, - light light=nolight, string name=L.s, - interaction interaction= + light light=nolight, string name="", + render render=defaultrender, interaction interaction= settings.autobillboard ? Billboard : Embedded) The optional `name' parameter is used as a prefix for naming the label patches in the PRC model tree. The default interaction is `Billboard', which means that labels are rotated interactively so that they always -lie on the projection plane. The interaction `Embedded' means that the -label interacts as a normal `3D' surface, as illustrated in the example +face the camera. The interaction `Embedded' means that the label +interacts as a normal `3D' surface, as illustrated in the example `billboard.asy'. Alternatively, a label can be transformed from the `XY' plane by an explicit transform3 or mapped to a specified two-dimensional plane with the predefined transform3 types `XY', `YZ', @@ -7069,13 +7073,11 @@ path3 p=z[0]..z[1]---z[2]::{Y}z[3] &z[3]..z[4]--z[5]::{Y}z[6] &z[6]::z[7]---z[8]..{Y}z[9]; -draw(p,grey+linewidth(4mm)+opacity(0.5)); +draw(p,grey+linewidth(4mm),currentlight); xaxis3(Label(XY()*"$x$",align=-3Y),red,above=true); yaxis3(Label(XY()*"$y$",align=-3X),red,above=true); -dot(z); - Three-dimensional versions of bars or arrows can be drawn with one of @@ -8154,10 +8156,10 @@ requires `Python 2.6.2' and the `Python Imaging Library': `http://www.python.org/ftp/python/2.6.2/python-2.6.2.msi' - `http://effbot.org/media/downloads/PIL-1.1.7.win32-py2.6.exe'. + `http://effbot.org/downloads/PIL-1.1.7.win32-py2.6.exe'. On `UNIX' systems, place -`http://effbot.org/media/downloads/Imaging-1.1.7.tar.gz' in the -`Asymptote' source directory, and type (as the root user): +`http://effbot.org/downloads/Imaging-1.1.7.tar.gz' in the `Asymptote' +source directory, and type (as the root user): tar -zxf Imaging-1.1.7.tar.gz cd Imaging-1.1.7 python setup.py install @@ -8345,7 +8347,7 @@ Index (line 68) * != <1>: Arithmetic & logical. (line 38) -* !=: Structures. (line 54) +* !=: Structures. (line 52) * % <1>: Interactive mode. (line 17) * %: Arithmetic & logical. (line 23) @@ -8392,7 +8394,7 @@ Index * 2D graphs: graph. (line 6) * 3D graphs: graph3. (line 6) * 3D grids: grid3. (line 6) -* 3D PostScript: three. (line 567) +* 3D PostScript: three. (line 570) * 3D rendering: Compiling from UNIX source. (line 16) * :: Arithmetic & logical. @@ -8404,7 +8406,7 @@ Index (line 44) * == <1>: Arithmetic & logical. (line 37) -* ==: Structures. (line 54) +* ==: Structures. (line 52) * >: Arithmetic & logical. (line 50) * >=: Arithmetic & logical. @@ -8421,7 +8423,7 @@ Index * abs <1>: Mathematical functions. (line 35) * abs: Data types. (line 60) -* accel <1>: three. (line 497) +* accel <1>: three. (line 502) * accel: Paths and guides. (line 115) * access: Import. (line 6) * acknowledgments: Credits. (line 6) @@ -8431,9 +8433,9 @@ Index (line 6) * acosh: Mathematical functions. (line 6) -* add <1>: three. (line 266) +* add <1>: three. (line 271) * add: Frames and pictures. (line 196) -* addViews: three. (line 383) +* addViews: three. (line 388) * adjust: Pens. (line 115) * Ai: Mathematical functions. (line 48) @@ -8441,11 +8443,11 @@ Index (line 48) * Airy: Mathematical functions. (line 48) -* alias <1>: Arrays. (line 184) -* alias: Structures. (line 54) +* alias <1>: Arrays. (line 183) +* alias: Structures. (line 52) * align: Options. (line 166) * Align: label. (line 12) -* all: Arrays. (line 332) +* all: Arrays. (line 331) * Allow: Pens. (line 327) * AND: Arithmetic & logical. (line 80) @@ -8457,21 +8459,21 @@ Index * animation: animation. (line 6) * annotate: annotate. (line 6) * antialias <1>: Options. (line 141) -* antialias: three. (line 205) +* antialias: three. (line 210) * antialiasing: Compiling from UNIX source. (line 16) * append <1>: Arrays. (line 39) * append: Files. (line 35) -* arc: three. (line 278) +* arc: three. (line 283) * Arc: Paths and guides. (line 32) * arc: Paths and guides. (line 22) * ArcArrow: draw. (line 26) -* ArcArrow3: three. (line 540) +* ArcArrow3: three. (line 543) * ArcArrows: draw. (line 26) -* ArcArrows3: three. (line 540) -* arclength <1>: three. (line 497) +* ArcArrows3: three. (line 543) +* arclength <1>: three. (line 502) * arclength: Paths and guides. (line 142) -* arctime <1>: three. (line 497) +* arctime <1>: three. (line 502) * arctime: Paths and guides. (line 146) * arguments: Default arguments. (line 6) * arithmetic operators: Arithmetic & logical. @@ -8483,11 +8485,11 @@ Index * Arrow: draw. (line 26) * arrow: Drawing commands. (line 31) * arrow keys: Tutorial. (line 35) -* Arrow3: three. (line 540) +* Arrow3: three. (line 543) * Arrows: draw. (line 26) * arrows: draw. (line 26) -* Arrows3: three. (line 540) -* as: Import. (line 70) +* Arrows3: three. (line 543) +* as: Import. (line 68) * aSin: Mathematical functions. (line 20) * asin: Mathematical functions. @@ -8497,7 +8499,7 @@ Index * Aspect: Frames and pictures. (line 54) * assert: Data types. (line 327) * assignment: Programming. (line 8) -* asy: Import. (line 105) +* asy: Import. (line 102) * asy-mode: Editing modes. (line 6) * asy.vim: Editing modes. (line 33) * asymptote.sty: LaTeX usage. (line 6) @@ -8513,8 +8515,8 @@ Index (line 6) * atleast: Bezier curves. (line 56) * attach <1>: graph. (line 415) -* attach: LaTeX usage. (line 32) -* autoadjust: three. (line 349) +* attach: LaTeX usage. (line 31) +* autoadjust: three. (line 354) * autoimport: Options. (line 109) * automatic scaling: graph. (line 682) * axialshade: fill. (line 43) @@ -8523,11 +8525,11 @@ Index * azimuth: Data types. (line 124) * babel: babel. (line 6) * background color: Frames and pictures. (line 168) -* BackView: three. (line 376) +* BackView: three. (line 381) * Bar: draw. (line 19) -* Bar3: three. (line 540) +* Bar3: three. (line 543) * Bars: draw. (line 19) -* Bars3: three. (line 540) +* Bars3: three. (line 543) * barsize: draw. (line 19) * base modules: Base modules. (line 6) * basealign: Pens. (line 168) @@ -8535,36 +8537,36 @@ Index * batch mode: Tutorial. (line 6) * beep: Data types. (line 340) * BeginArcArrow: draw. (line 26) -* BeginArcArrow3: three. (line 540) +* BeginArcArrow3: three. (line 543) * BeginArrow: draw. (line 26) -* BeginArrow3: three. (line 540) +* BeginArrow3: three. (line 543) * BeginBar: draw. (line 19) -* BeginBar3: three. (line 540) +* BeginBar3: three. (line 543) * BeginDotMargin: draw. (line 42) -* BeginDotMargin3: three. (line 556) +* BeginDotMargin3: three. (line 559) * BeginMargin: draw. (line 42) -* BeginMargin3: three. (line 556) +* BeginMargin3: three. (line 559) * BeginPenMargin: draw. (line 42) -* BeginPenMargin2: three. (line 556) -* BeginPenMargin3: three. (line 556) +* BeginPenMargin2: three. (line 559) +* BeginPenMargin3: three. (line 559) * BeginPoint: label. (line 57) * Bessel: Mathematical functions. (line 48) * bevel: flowchart. (line 75) * beveljoin: Pens. (line 138) * Bezier curves: Bezier curves. (line 6) -* bezulate: three. (line 99) +* bezulate: three. (line 104) * Bi: Mathematical functions. (line 48) * Bi_deriv: Mathematical functions. (line 48) -* Billboard: three. (line 467) +* Billboard: three. (line 472) * binary format: Files. (line 70) * binary operators: Arithmetic & logical. (line 6) * binarytree: binarytree. (line 6) * binput: Files. (line 70) -* black stripes: three. (line 205) +* black stripes: three. (line 210) * Blank: draw. (line 26) * block.bottom: flowchart. (line 19) * block.bottomleft: flowchart. (line 19) @@ -8583,11 +8585,11 @@ Index (line 6) * Bottom: graph. (line 134) * BottomTop: graph. (line 140) -* BottomView: three. (line 376) +* BottomView: three. (line 381) * bounding box: Frames and pictures. (line 168) * Bounds: graph3. (line 20) * boutput: Files. (line 70) -* box <1>: three. (line 300) +* box <1>: three. (line 305) * box: Frames and pictures. (line 22) * bp: Tutorial. (line 24) * break: Programming. (line 29) @@ -8609,7 +8611,7 @@ Index * cd: Files. (line 24) * ceil: Mathematical functions. (line 26) -* center: three. (line 333) +* center: three. (line 338) * Center: label. (line 62) * checker: Pens. (line 251) * Chinese: unicode. (line 12) @@ -8618,7 +8620,7 @@ Index * Ci: Mathematical functions. (line 48) * circle <1>: flowchart. (line 64) -* circle: three. (line 274) +* circle: three. (line 279) * Circle: Paths and guides. (line 17) * circle: Paths and guides. (line 10) * circlebarframe: markers. (line 18) @@ -8639,7 +8641,7 @@ Index * colorless: Pens. (line 54) * colors: Pens. (line 51) * comma: Files. (line 58) -* comma-separated-value mode: Arrays. (line 365) +* comma-separated-value mode: Arrays. (line 364) * command-line options <1>: Options. (line 6) * command-line options: Configuring. (line 83) * comment character: Files. (line 15) @@ -8647,7 +8649,7 @@ Index * Compiling from UNIX source: Compiling from UNIX source. (line 6) * complement: Arrays. (line 150) -* concat: Arrays. (line 180) +* concat: Arrays. (line 179) * conditional <1>: Arithmetic & logical. (line 73) * conditional: Programming. (line 8) @@ -8656,7 +8658,7 @@ Index * configuration file: Configuring. (line 23) * configuring: Configuring. (line 6) * conj: Data types. (line 57) -* constructors: Structures. (line 95) +* constructors: Structures. (line 91) * context: Options. (line 141) * continue <1>: Debugger. (line 31) * continue: Programming. (line 29) @@ -8671,29 +8673,29 @@ Index * convert: Configuring. (line 67) * convertOptions: Options. (line 128) * Coons shading: fill. (line 74) -* copy: Arrays. (line 171) +* copy: Arrays. (line 170) * Cos: Mathematical functions. (line 20) * cos: Mathematical functions. (line 6) * cosh: Mathematical functions. (line 6) -* cputime: Structures. (line 177) +* cputime: Structures. (line 169) * crop: graph. (line 636) * cropping graphs: graph. (line 636) * cross <1>: graph. (line 484) * cross: Data types. (line 167) * crossframe: markers. (line 23) * crosshatch: Pens. (line 267) -* csv: Arrays. (line 365) +* csv: Arrays. (line 364) * CTZ: Arithmetic & logical. (line 80) -* cubicroots: Arrays. (line 321) +* cubicroots: Arrays. (line 320) * curl <1>: three. (line 6) * curl: Bezier curves. (line 63) * curlSpecifier: Paths and guides. (line 391) * currentpen: Pens. (line 6) -* currentprojection: three. (line 373) +* currentprojection: three. (line 378) * curve: slopefield. (line 20) * custom axis types: graph. (line 144) * custom mark routine: graph. (line 576) @@ -8701,7 +8703,7 @@ Index * cut: Paths and guides. (line 237) * cycle <1>: three. (line 6) * cycle: Tutorial. (line 73) -* cyclic <1>: three. (line 497) +* cyclic <1>: three. (line 502) * cyclic <2>: Arrays. (line 39) * cyclic: Paths and guides. (line 74) * Cyrillic: unicode. (line 7) @@ -8717,8 +8719,9 @@ Index * default arguments: Default arguments. (line 6) * defaultformat: graph. (line 175) * DefaultHead: draw. (line 26) -* DefaultHead3: three. (line 540) +* DefaultHead3: three. (line 543) * defaultpen: Pens. (line 46) +* defaultrender: three. (line 47) * deferred drawing: simplex. (line 6) * Degrees: Mathematical functions. (line 17) @@ -8728,10 +8731,10 @@ Index * delete <1>: Arrays. (line 39) * delete: Files. (line 145) * description: Description. (line 6) -* diagonal: Arrays. (line 306) +* diagonal: Arrays. (line 305) * diamond: flowchart. (line 57) -* dimension: Arrays. (line 370) -* dir <1>: three. (line 497) +* dimension: Arrays. (line 369) +* dir <1>: three. (line 502) * dir <2>: Paths and guides. (line 98) * dir <3>: Data types. (line 85) * dir: Search paths. (line 10) @@ -8741,15 +8744,15 @@ Index * dirtime: Paths and guides. (line 152) * display: Configuring. (line 67) * do: Programming. (line 29) -* dot <1>: Arrays. (line 262) +* dot <1>: Arrays. (line 261) * dot <2>: Data types. (line 98) * dot: draw. (line 83) * DotMargin: draw. (line 42) -* DotMargin3: three. (line 556) +* DotMargin3: three. (line 559) * DotMargins: draw. (line 42) -* DotMargins3: three. (line 556) +* DotMargins3: three. (line 559) * dotted: Pens. (line 95) -* double deferred drawing: three. (line 251) +* double deferred drawing: three. (line 256) * double precision: Files. (line 70) * Draw: Frames and pictures. (line 147) * draw: draw. (line 110) @@ -8774,28 +8777,28 @@ Index * else: Programming. (line 8) * emacs: Editing modes. (line 6) * embed: embed. (line 6) -* Embedded: three. (line 467) +* Embedded: three. (line 472) * empty: Frames and pictures. (line 7) * EndArcArrow: draw. (line 26) -* EndArcArrow3: three. (line 540) +* EndArcArrow3: three. (line 543) * EndArrow: draw. (line 26) -* EndArrow3: three. (line 540) +* EndArrow3: three. (line 543) * EndBar: draw. (line 19) -* EndBar3: three. (line 540) +* EndBar3: three. (line 543) * EndDotMargin: draw. (line 42) -* EndDotMargin3: three. (line 556) +* EndDotMargin3: three. (line 559) * endl: Files. (line 58) * EndMargin: draw. (line 42) -* EndMargin3: three. (line 556) +* EndMargin3: three. (line 559) * EndPenMargin: draw. (line 42) -* EndPenMargin2: three. (line 556) -* EndPenMargin3: three. (line 556) +* EndPenMargin2: three. (line 559) +* EndPenMargin3: three. (line 559) * EndPoint: label. (line 57) * envelope: Frames and pictures. (line 22) * environment variables: Configuring. (line 87) -* eof <1>: Arrays. (line 347) +* eof <1>: Arrays. (line 346) * eof: Files. (line 88) -* eol <1>: Arrays. (line 347) +* eol <1>: Arrays. (line 346) * eol: Files. (line 88) * EPS <1>: Options. (line 141) * EPS: label. (line 80) @@ -8809,7 +8812,7 @@ Index * error: Files. (line 15) * error bars: graph. (line 532) * errorbars: graph. (line 484) -* eval: Import. (line 101) +* eval: Import. (line 98) * evenodd <1>: Pens. (line 152) * evenodd: Tutorial. (line 146) * exit <1>: Debugger. (line 57) @@ -8819,7 +8822,7 @@ Index (line 6) * expi: Data types. (line 81) * explicit: Casts. (line 6) -* explicit casts: Casts. (line 22) +* explicit casts: Casts. (line 21) * expm1: Mathematical functions. (line 6) * exponential integral: Mathematical functions. @@ -8828,19 +8831,19 @@ Index * extension <1>: MetaPost. (line 10) * extension: Paths and guides. (line 232) * external: embed. (line 28) -* extrude: three. (line 491) +* extrude: three. (line 496) * F: Mathematical functions. (line 48) * fabs: Mathematical functions. (line 6) -* face: three. (line 575) +* face: three. (line 578) * factorial: Mathematical functions. (line 39) * Fedora: UNIX binary distributions. (line 15) * feynman: feynman. (line 6) * fft <1>: math. (line 26) -* fft: Arrays. (line 249) +* fft: Arrays. (line 248) * FFTW: Compiling from UNIX source. (line 58) * file <1>: Debugger. (line 45) @@ -8858,7 +8861,7 @@ Index * find: Data types. (line 224) * firstcut: Paths and guides. (line 247) * fit: Frames and pictures. (line 103) -* fit3: three. (line 264) +* fit3: three. (line 269) * fix-cm: Pens. (line 178) * fixedscaling: Frames and pictures. (line 74) * floor: Mathematical functions. @@ -8879,7 +8882,7 @@ Index * freeglut: Compiling from UNIX source. (line 16) * from: Import. (line 17) -* FrontView: three. (line 376) +* FrontView: three. (line 381) * function declarations: Functions. (line 67) * function shading: fill. (line 96) * Function shading: fill. (line 96) @@ -8898,7 +8901,7 @@ Index * getstring: Files. (line 113) * gettriple: Files. (line 113) * glOptions <1>: Options. (line 128) -* glOptions: three. (line 205) +* glOptions: three. (line 210) * GNU Scientific Library: Mathematical functions. (line 48) * gouraudshade: fill. (line 58) @@ -8926,7 +8929,7 @@ Index * guide: Paths and guides. (line 300) * guide3: three. (line 6) * hatch: Pens. (line 267) -* height: LaTeX usage. (line 32) +* height: LaTeX usage. (line 31) * help <1>: Debugger. (line 30) * help <2>: Help. (line 6) * help: Interactive mode. (line 44) @@ -8936,14 +8939,14 @@ Index * hex: Data types. (line 280) * hexidecimal <1>: Pens. (line 59) * hexidecimal: Data types. (line 280) -* hidden surface removal: three. (line 575) +* hidden surface removal: three. (line 578) * histogram: Mathematical functions. (line 39) * history <1>: Interactive mode. (line 59) * history: Files. (line 138) * historylines: Interactive mode. (line 64) * HookHead: draw. (line 26) -* HookHead3: three. (line 540) +* HookHead3: three. (line 543) * Horizontal: flowchart. (line 81) * hyperrefOptions: Options. (line 128) * hypot: Mathematical functions. @@ -8952,12 +8955,12 @@ Index (line 48) * i_scaled: Mathematical functions. (line 48) -* iconic: three. (line 205) -* identity <1>: Arrays. (line 303) +* iconic: three. (line 210) +* identity <1>: Arrays. (line 302) * identity <2>: Mathematical functions. (line 6) * identity: Transforms. (line 24) -* identity4: three. (line 427) +* identity4: three. (line 432) * if: Programming. (line 8) * IgnoreAspect: Frames and pictures. (line 58) * image: palette. (line 34) @@ -8968,11 +8971,11 @@ Index * implicit casts: Casts. (line 6) * implicit linear solver: MetaPost. (line 10) * implicit scaling: Implicit scaling. (line 6) -* import: Import. (line 48) +* import: Import. (line 46) * inches: Tutorial. (line 61) * including images: label. (line 80) * increasing: math. (line 59) -* inheritance: Structures. (line 189) +* inheritance: Structures. (line 181) * initialized: Arrays. (line 39) * initializers: Variable initializers. (line 6) @@ -8993,22 +8996,22 @@ Index * interp: Arithmetic & logical. (line 76) * interpolate: interpolate. (line 6) -* intersect <1>: three. (line 497) +* intersect <1>: three. (line 502) * intersect <2>: math. (line 13) * intersect: Paths and guides. (line 181) -* intersectionpoint <1>: three. (line 497) +* intersectionpoint <1>: three. (line 502) * intersectionpoint <2>: math. (line 17) * intersectionpoint: Paths and guides. (line 224) -* intersectionpoints <1>: three. (line 497) +* intersectionpoints <1>: three. (line 502) * intersectionpoints: Paths and guides. (line 228) -* intersections <1>: three. (line 497) +* intersections <1>: three. (line 502) * intersections: Paths and guides. (line 192) * InTicks: graph3. (line 34) * intMax: Data types. (line 28) * intMin: Data types. (line 28) -* inverse <1>: Arrays. (line 309) +* inverse <1>: Arrays. (line 308) * inverse: Transforms. (line 16) -* invert: three. (line 417) +* invert: three. (line 422) * invisible: Pens. (line 39) * J: Mathematical functions. (line 6) @@ -9019,11 +9022,11 @@ Index (line 48) * Kate: Editing modes. (line 49) * KDE editor: Editing modes. (line 49) -* keyboard bindings:: three. (line 164) +* keyboard bindings:: three. (line 169) * keys: Arrays. (line 39) * keywords: Named arguments. (line 6) * Korean: unicode. (line 12) -* label: three. (line 461) +* label: three. (line 466) * Label <1>: graph. (line 342) * Label: label. (line 15) * label: clip. (line 16) @@ -9048,24 +9051,25 @@ Index * LeftRight: graph. (line 290) * LeftSide: label. (line 62) * LeftTicks: graph. (line 161) -* LeftView: three. (line 376) +* LeftView: three. (line 381) * legend <1>: graph. (line 431) * legend <2>: draw. (line 64) * legend: Drawing commands. (line 31) * Legendre: Mathematical functions. (line 48) -* length <1>: three. (line 497) +* length <1>: three. (line 502) * length <2>: Arrays. (line 39) * length <3>: Paths and guides. (line 65) * length: Data types. (line 60) * letter: Configuring. (line 61) +* lexorder: math. (line 68) * libm routines: Mathematical functions. (line 6) * libsigsegv <1>: Help. (line 33) * libsigsegv: Functions. (line 88) * limits: graph. (line 636) -* line: Arrays. (line 347) -* line mode: Arrays. (line 347) +* line: Arrays. (line 346) +* line mode: Arrays. (line 346) * Linear: graph. (line 682) * linecap: Pens. (line 129) * linejoin: Pens. (line 138) @@ -9094,10 +9098,10 @@ Index * makepen: Pens. (line 300) * map: Arrays. (line 141) * Margin: draw. (line 42) -* Margin3: three. (line 556) -* margins: three. (line 257) +* Margin3: three. (line 559) +* margins: three. (line 262) * Margins: draw. (line 42) -* Margins3: three. (line 556) +* Margins3: three. (line 559) * mark: graph. (line 484) * markangle: markers. (line 38) * marker: graph. (line 484) @@ -9107,14 +9111,14 @@ Index * math: math. (line 6) * mathematical functions: Mathematical functions. (line 6) -* max <1>: three. (line 497) -* max <2>: Arrays. (line 228) +* max <1>: three. (line 502) +* max <2>: Arrays. (line 227) * max <3>: Frames and pictures. (line 7) * max: Paths and guides. (line 264) * maxbound: Data types. (line 104) -* maxtile: three. (line 205) +* maxtile: three. (line 210) * maxtimes: Paths and guides. (line 219) -* maxviewport: three. (line 205) +* maxviewport: three. (line 210) * MetaPost: MetaPost. (line 6) * MetaPost ... : Bezier curves. (line 67) * MetaPost cutafter: Paths and guides. (line 252) @@ -9123,13 +9127,13 @@ Index * MetaPost whatever: MetaPost. (line 10) * Microsoft Windows: Microsoft Windows. (line 6) * MidArcArrow: draw. (line 26) -* MidArcArrow3: three. (line 540) +* MidArcArrow3: three. (line 543) * MidArrow: draw. (line 26) -* MidArrow3: three. (line 540) +* MidArrow3: three. (line 543) * midpoint: Paths and guides. (line 166) * MidPoint: label. (line 57) -* min <1>: three. (line 497) -* min <2>: Arrays. (line 221) +* min <1>: three. (line 502) +* min <2>: Arrays. (line 220) * min <3>: Frames and pictures. (line 7) * min: Paths and guides. (line 260) * minbound: Data types. (line 101) @@ -9140,10 +9144,10 @@ Index * mm: Tutorial. (line 61) * mode: Files. (line 84) * mouse: GUI. (line 6) -* mouse bindings: three. (line 132) +* mouse bindings: three. (line 137) * Move: Pens. (line 339) * MoveQuiet: Pens. (line 345) -* multisample: three. (line 122) +* multisample: three. (line 127) * multisampling: Compiling from UNIX source. (line 16) * N: Tutorial. (line 104) @@ -9161,10 +9165,10 @@ Index * NoFill <1>: Frames and pictures. (line 141) * NoFill: draw. (line 26) * NoMargin: draw. (line 42) -* NoMargin3: three. (line 556) +* NoMargin3: three. (line 559) * none: Files. (line 58) * None: draw. (line 19) -* normal: three. (line 483) +* normal: three. (line 488) * nosafe: Options. (line 161) * NOT: Arithmetic & logical. (line 80) @@ -9173,13 +9177,13 @@ Index * null: Structures. (line 6) * nullpen <1>: Frames and pictures. (line 127) * nullpen: label. (line 14) -* NURBS: three. (line 353) -* O: three. (line 269) +* NURBS: three. (line 358) +* O: three. (line 274) * obj: obj. (line 9) -* oblique: three. (line 314) -* obliqueX: three. (line 322) -* obliqueY: three. (line 329) -* obliqueZ: three. (line 314) +* oblique: three. (line 319) +* obliqueX: three. (line 327) +* obliqueY: three. (line 334) +* obliqueZ: three. (line 319) * ode: ode. (line 9) * offset <1>: Options. (line 166) * offset: Pens. (line 115) @@ -9188,15 +9192,15 @@ Index * OmitTickIntervals: graph. (line 239) * opacity: Pens. (line 222) * open: Files. (line 11) -* OpenGL: three. (line 122) +* OpenGL: three. (line 127) * operator: User-defined operators. (line 6) * operator --: graph. (line 31) * operator ..: graph. (line 34) * operator answer: Interactive mode. (line 37) -* operator cast: Casts. (line 31) -* operator ecast: Casts. (line 58) -* operator init <1>: Structures. (line 141) +* operator cast: Casts. (line 30) +* operator ecast: Casts. (line 57) +* operator init <1>: Structures. (line 134) * operator init: Variable initializers. (line 6) * operators: Operators. (line 6) @@ -9204,8 +9208,8 @@ Index * OR: Arithmetic & logical. (line 80) * orientation: Frames and pictures. (line 95) -* orthographic: three. (line 333) -* outformat: three. (line 122) +* orthographic: three. (line 338) +* outformat: three. (line 127) * outprefix: Frames and pictures. (line 83) * output <1>: Options. (line 141) * output: Files. (line 35) @@ -9218,7 +9222,7 @@ Index * packing: Rest arguments. (line 30) * pair <1>: Data types. (line 41) * pair: Tutorial. (line 49) -* pairs: Arrays. (line 245) +* pairs: Arrays. (line 244) * paperheight: Configuring. (line 61) * papertype: Configuring. (line 61) * paperwidth: Configuring. (line 61) @@ -9226,7 +9230,7 @@ Index * parametric surface: graph3. (line 100) * parametrized curve: graph. (line 636) * partialsum: math. (line 53) -* patch-dependent colors: three. (line 76) +* patch-dependent colors: three. (line 81) * path <1>: flowchart. (line 81) * path <2>: three. (line 43) * path: Paths and guides. (line 7) @@ -9241,30 +9245,30 @@ Index * pdfviewerOptions: Options. (line 128) * pen: Pens. (line 6) * PenMargin: draw. (line 42) -* PenMargin2: three. (line 556) -* PenMargin3: three. (line 556) +* PenMargin2: three. (line 559) +* PenMargin3: three. (line 559) * PenMargins: draw. (line 42) -* PenMargins2: three. (line 556) -* PenMargins3: three. (line 556) +* PenMargins2: three. (line 559) +* PenMargins3: three. (line 559) * perpendicular: geometry. (line 6) -* perspective: three. (line 353) +* perspective: three. (line 358) * picture: Frames and pictures. (line 35) * picture alignment: Frames and pictures. (line 209) * piecewisestraight: Paths and guides. (line 81) * Pl: Mathematical functions. (line 48) * plain: plain. (line 6) -* planar: three. (line 84) -* plane: three. (line 296) -* planeproject: three. (line 480) -* point <1>: three. (line 497) +* planar: three. (line 89) +* plane: three. (line 301) +* planeproject: three. (line 485) +* point <1>: three. (line 502) * point: Paths and guides. (line 84) * polar: Data types. (line 119) * polargraph: graph. (line 90) * polygon: graph. (line 484) * pop: Arrays. (line 39) * Portrait: Frames and pictures. (line 95) -* postcontrol <1>: three. (line 497) +* postcontrol <1>: three. (line 502) * postcontrol: Paths and guides. (line 135) * postfix operators: Self & prefix operators. (line 19) @@ -9273,9 +9277,9 @@ Index * PostScript subpath: Tutorial. (line 132) * pow10: Mathematical functions. (line 6) -* prc: three. (line 226) +* prc: three. (line 231) * precision: Files. (line 88) -* precontrol <1>: three. (line 497) +* precontrol <1>: three. (line 502) * precontrol: Paths and guides. (line 128) * prefix operators: Self & prefix operators. (line 6) @@ -9290,12 +9294,12 @@ Index * public: Structures. (line 6) * push: Arrays. (line 39) * Python usage: Interactive mode. (line 80) -* quadraticroots: Arrays. (line 312) +* quadraticroots: Arrays. (line 311) * quarticroots: math. (line 22) * quit <1>: Debugger. (line 54) * quit <2>: Interactive mode. (line 59) * quit: Tutorial. (line 35) -* quote: Import. (line 119) +* quote: Import. (line 116) * quotient: Arithmetic & logical. (line 6) * RadialShade: Frames and pictures. (line 159) @@ -9303,16 +9307,16 @@ Index * RadialShadeDraw: Frames and pictures. (line 163) * radians: Mathematical functions. (line 17) -* radius <1>: three. (line 497) +* radius <1>: three. (line 502) * radius: Paths and guides. (line 124) * Rainbow: palette. (line 12) * rand: Mathematical functions. (line 39) * randMax: Mathematical functions. (line 39) -* read: Arrays. (line 388) +* read: Arrays. (line 387) * reading: Files. (line 11) -* reading string arrays: Arrays. (line 357) +* reading string arrays: Arrays. (line 356) * readline: Files. (line 130) * real: Data types. (line 33) * realDigits: Data types. (line 33) @@ -9330,14 +9334,14 @@ Index (line 6) * rename: Files. (line 147) * render <1>: Options. (line 141) -* render: three. (line 122) +* render: three. (line 47) * replace: Data types. (line 252) * resetdefaultpen: Pens. (line 353) * rest arguments: Rest arguments. (line 6) * restore: Frames and pictures. (line 265) * restricted: Structures. (line 6) * return: Debugger. (line 48) -* reverse <1>: three. (line 497) +* reverse <1>: three. (line 502) * reverse <2>: Arrays. (line 146) * reverse <3>: Paths and guides. (line 169) * reverse: Data types. (line 248) @@ -9349,8 +9353,8 @@ Index * Right: graph. (line 287) * RightSide: label. (line 62) * RightTicks: graph. (line 161) -* RightView: three. (line 376) -* rotate: three. (line 448) +* RightView: three. (line 381) +* rotate: three. (line 453) * Rotate: label. (line 37) * Rotate(pair z): label. (line 40) * round: Mathematical functions. @@ -9361,19 +9365,19 @@ Index * roundrectangle: flowchart. (line 69) * RPM: UNIX binary distributions. (line 6) -* runtime imports: Import. (line 101) +* runtime imports: Import. (line 98) * Russian: unicode. (line 7) * S: Tutorial. (line 104) * safe: Options. (line 161) * save: Frames and pictures. (line 262) * saveline: Files. (line 130) -* scale: three. (line 447) +* scale: three. (line 452) * Scale: graph. (line 698) * scale <1>: graph. (line 682) * scale <2>: Transforms. (line 39) * scale: Pens. (line 115) * Scale: label. (line 46) -* scale3: three. (line 444) +* scale3: three. (line 449) * scaled graph: graph. (line 663) * scientific graph: graph. (line 396) * scroll: Files. (line 104) @@ -9396,12 +9400,12 @@ Index * sgn: Mathematical functions. (line 26) * shading: fill. (line 32) -* shift <1>: three. (line 432) +* shift <1>: three. (line 437) * shift: Transforms. (line 27) * Shift: label. (line 34) * shiftless: Transforms. (line 53) * shipout: Frames and pictures. (line 83) -* showtarget: three. (line 333) +* showtarget: three. (line 338) * Si: Mathematical functions. (line 48) * signedint: Files. (line 70) @@ -9418,14 +9422,14 @@ Index * singlereal: Files. (line 70) * sinh: Mathematical functions. (line 6) -* SixViews: three. (line 391) -* SixViewsFR: three. (line 391) -* SixViewsUS: three. (line 391) +* SixViews: three. (line 396) +* SixViewsFR: three. (line 396) +* SixViewsUS: three. (line 396) * size <1>: Options. (line 141) -* size <2>: three. (line 497) +* size <2>: three. (line 502) * size <3>: Frames and pictures. (line 43) * size: Paths and guides. (line 70) -* size3: three. (line 254) +* size3: three. (line 259) * slant: Transforms. (line 45) * Slant: label. (line 43) * sleep: Data types. (line 334) @@ -9436,8 +9440,8 @@ Index * slopefield: slopefield. (line 6) * solid: Pens. (line 95) * solids: solids. (line 9) -* solve: Arrays. (line 281) -* sort: Arrays. (line 187) +* solve: Arrays. (line 280) +* sort: Arrays. (line 186) * Spline <1>: graph3. (line 100) * Spline: graph. (line 34) * split: Data types. (line 261) @@ -9455,7 +9459,7 @@ Index * step: Debugger. (line 39) * stickframe: markers. (line 16) * stop: Debugger. (line 10) -* straight: three. (line 497) +* straight: three. (line 502) * Straight: graph. (line 31) * straight: Paths and guides. (line 77) * strftime: Data types. (line 292) @@ -9465,12 +9469,12 @@ Index * strptime: Data types. (line 300) * struct: Structures. (line 6) * structures: Structures. (line 6) -* subpath <1>: three. (line 497) +* subpath <1>: three. (line 502) * subpath: Paths and guides. (line 172) * subpictures: Frames and pictures. (line 103) * substr: Data types. (line 244) * Subversion: Subversion. (line 6) -* sum: Arrays. (line 216) +* sum: Arrays. (line 215) * superpath: Tutorial. (line 132) * Suppress: Pens. (line 331) * SuppressQuiet: Pens. (line 335) @@ -9489,7 +9493,7 @@ Index (line 6) * tanh: Mathematical functions. (line 6) -* target: three. (line 333) +* target: three. (line 338) * tell: Files. (line 88) * tension <1>: three. (line 6) * tension: Bezier curves. (line 56) @@ -9502,7 +9506,7 @@ Index * TeX string: Data types. (line 179) * texcommand: Configuring. (line 67) * TeXHead: draw. (line 26) -* TeXHead3: three. (line 540) +* TeXHead3: three. (line 543) * texpath <1>: label. (line 116) * texpath: Configuring. (line 67) * texpreamble: Frames and pictures. (line 286) @@ -9510,13 +9514,13 @@ Index * textbook graph: graph. (line 371) * tgz: UNIX binary distributions. (line 6) -* thick: three. (line 105) -* thin: three. (line 105) +* thick: three. (line 110) +* thin: three. (line 110) * this: Structures. (line 6) * three: three. (line 6) -* ThreeViews: three. (line 391) -* ThreeViewsFR: three. (line 391) -* ThreeViewsUS: three. (line 391) +* ThreeViews: three. (line 396) +* ThreeViewsFR: three. (line 396) +* ThreeViewsUS: three. (line 396) * tick: graph. (line 342) * Ticks: graph. (line 161) * ticks: graph. (line 161) @@ -9527,26 +9531,26 @@ Index * time: Data types. (line 292) * times: Paths and guides. (line 206) * Top: graph. (line 137) -* TopView: three. (line 376) +* TopView: three. (line 381) * trace: Debugger. (line 51) * trailingzero: graph. (line 175) -* transform <1>: three. (line 472) +* transform <1>: three. (line 477) * transform: Transforms. (line 6) -* transform3: three. (line 427) +* transform3: three. (line 432) * transparency: Pens. (line 222) -* transpose: Arrays. (line 208) +* transpose: Arrays. (line 207) * tree: tree. (line 9) * trembling: trembling. (line 6) * triangle: geometry. (line 6) * triangulate: contour. (line 157) -* tridiagonal: Arrays. (line 269) +* tridiagonal: Arrays. (line 268) * trigonometric integrals: Mathematical functions. (line 48) * triple: Data types. (line 108) * TrueMargin: draw. (line 42) -* TrueMargin3: three. (line 556) +* TrueMargin3: three. (line 559) * tube <1>: tube. (line 6) -* tube: three. (line 105) +* tube: three. (line 110) * tutorial: Tutorial. (line 6) * typedef <1>: Functions. (line 36) * typedef: Data types. (line 344) @@ -9557,10 +9561,11 @@ Index * unicode: unicode. (line 6) * uniform: Arrays. (line 155) * Uninstall: Uninstall. (line 6) +* unique: math. (line 64) * unit: Data types. (line 78) -* unitbox <1>: three. (line 302) +* unitbox <1>: three. (line 307) * unitbox: Tutorial. (line 153) -* unitcircle <1>: three. (line 269) +* unitcircle <1>: three. (line 274) * unitcircle: Tutorial. (line 126) * unitrand: Mathematical functions. (line 39) @@ -9569,8 +9574,8 @@ Index * UNIX binary distributions: UNIX binary distributions. (line 6) * unpacking: Rest arguments. (line 39) -* unravel: Import. (line 31) -* up: three. (line 333) +* unravel: Import. (line 30) +* up: three. (line 338) * update: Files. (line 35) * UpsideDown: Frames and pictures. (line 95) * usepackage: Frames and pictures. (line 291) @@ -9579,34 +9584,36 @@ Index (line 6) * usleep: Data types. (line 337) * value: math. (line 38) +* var: Variable initializers. + (line 63) * variable initializers: Variable initializers. (line 6) * vectorfield: graph. (line 975) * vectorfield3: graph3. (line 159) -* vectorization: Arrays. (line 326) +* vectorization: Arrays. (line 325) * verbatim: Frames and pictures. (line 271) -* vertex-dependent colors: three. (line 76) +* vertex-dependent colors: three. (line 81) * Vertical: flowchart. (line 81) -* viewportheight: LaTeX usage. (line 32) -* viewportmargin: three. (line 257) -* viewportsize: three. (line 257) -* viewportwidth: LaTeX usage. (line 32) -* views: three. (line 226) +* viewportheight: LaTeX usage. (line 31) +* viewportmargin: three. (line 262) +* viewportsize: three. (line 262) +* viewportwidth: LaTeX usage. (line 31) +* views: three. (line 231) * vim: Editing modes. (line 33) -* virtual functions: Structures. (line 189) +* virtual functions: Structures. (line 181) * void: Data types. (line 10) * W: Tutorial. (line 104) * whatever: Paths and guides. (line 232) * Wheel: palette. (line 22) * wheel mouse: GUI. (line 6) * while: Programming. (line 29) -* white-space string delimiter mode: Arrays. (line 357) -* width: LaTeX usage. (line 32) +* white-space string delimiter mode: Arrays. (line 356) +* width: LaTeX usage. (line 31) * windingnumber: Paths and guides. (line 268) -* word: Arrays. (line 357) -* write <1>: Arrays. (line 397) +* word: Arrays. (line 356) +* write <1>: Arrays. (line 396) * write: Files. (line 50) -* X: three. (line 269) +* X: three. (line 274) * xasy: GUI. (line 6) * xaxis3: graph3. (line 7) * xelatex <1>: Options. (line 141) @@ -9620,15 +9627,15 @@ Index * xoutput: Files. (line 70) * xpart: Data types. (line 89) * xscale: Transforms. (line 33) -* xscale3: three. (line 435) +* xscale3: three. (line 440) * xtick: graph. (line 342) -* XY: three. (line 457) +* XY: three. (line 462) * XYEquals: graph3. (line 20) * XYZero: graph3. (line 20) * XZEquals: graph3. (line 20) * XZero: graph. (line 275) * XZZero: graph3. (line 20) -* Y <1>: three. (line 269) +* Y <1>: three. (line 274) * Y: Mathematical functions. (line 6) * yaxis3: graph3. (line 7) @@ -9637,14 +9644,14 @@ Index * ylimits: graph. (line 636) * ypart: Data types. (line 92) * yscale: Transforms. (line 36) -* yscale3: three. (line 438) +* yscale3: three. (line 443) * ytick: graph. (line 342) -* YX: three. (line 472) -* YZ: three. (line 472) +* YX: three. (line 477) +* YZ: three. (line 477) * YZEquals: graph3. (line 20) * YZero: graph. (line 125) * YZZero: graph3. (line 20) -* Z: three. (line 269) +* Z: three. (line 274) * zaxis3: graph3. (line 7) * zero_Ai: Mathematical functions. (line 48) @@ -9660,9 +9667,9 @@ Index * zeta: Mathematical functions. (line 48) * zpart: Data types. (line 161) -* zscale3: three. (line 441) -* ZX: three. (line 472) -* ZY: three. (line 472) +* zscale3: three. (line 446) +* ZX: three. (line 477) +* ZY: three. (line 477) * |: Arithmetic & logical. (line 62) * ||: Arithmetic & logical. @@ -9687,130 +9694,130 @@ Node: Subversion25457 Node: Uninstall25920 Node: Tutorial26270 Ref: unitcircle30496 -Node: Drawing commands32477 -Node: draw34188 -Ref: arrows35336 -Node: fill40579 -Ref: gradient shading41623 -Node: clip45851 -Node: label46443 -Ref: Label47142 -Node: Bezier curves52867 -Node: Programming56444 -Ref: array iteration57258 -Node: Data types58340 -Ref: format67348 -Node: Paths and guides70951 -Ref: circle71205 -Ref: arctime76693 -Ref: extension80548 -Node: Pens87231 -Ref: fillrule94597 -Ref: basealign95494 -Ref: transparency98319 -Ref: makepen101762 -Ref: overwrite102600 -Node: Transforms103810 -Node: Frames and pictures105601 -Ref: envelope106742 -Ref: size107825 -Ref: unitsize108812 -Ref: shipout109872 -Ref: filltype112205 -Ref: add115342 -Ref: add about116288 -Ref: tex119226 -Node: Files120100 -Ref: cd121065 -Ref: scroll125497 -Node: Variable initializers128570 -Node: Structures130865 -Node: Operators138317 -Node: Arithmetic & logical138631 -Node: Self & prefix operators140605 -Node: User-defined operators141393 -Node: Implicit scaling142304 -Node: Functions142867 -Ref: stack overflow145620 -Node: Default arguments146184 -Node: Named arguments146923 -Node: Rest arguments149085 -Node: Mathematical functions151895 -Node: Arrays156502 -Ref: sort163513 -Ref: tridiagonal165923 -Ref: solve167151 -Node: Slices171344 -Node: Casts175237 -Node: Import177203 -Node: Static182433 -Node: LaTeX usage185329 -Node: Base modules190767 -Node: plain193267 -Node: simplex193919 -Node: math194192 -Node: interpolate196525 -Node: geometry196804 -Node: trembling197398 -Node: stats197749 -Node: patterns198009 -Node: markers198245 -Node: tree200028 -Node: binarytree200216 -Node: drawtree200805 -Node: syzygy201009 -Node: feynman201283 -Node: roundedpath201558 -Node: animation201841 -Ref: animate202258 -Node: embed203397 -Node: slide205186 -Node: MetaPost205526 -Node: unicode206242 -Node: latin1207130 -Node: babel207498 -Node: labelpath207727 -Node: labelpath3208547 -Node: annotate208858 -Node: CAD209329 -Node: graph209639 -Ref: ticks216768 -Ref: pathmarkers230047 -Ref: marker230512 -Ref: markuniform230863 -Ref: errorbars232654 -Ref: automatic scaling236710 -Node: palette247356 -Ref: images247474 -Ref: image251645 -Ref: logimage252123 -Ref: penimage252929 -Node: three253373 -Ref: PostScript3D277702 -Node: obj279394 -Node: graph3279646 -Ref: GaussianSurface284771 -Node: grid3285856 -Node: solids286596 -Node: tube287544 -Node: flowchart289779 -Node: contour294348 -Node: contour3299473 -Node: slopefield299780 -Node: ode301217 -Node: Options301477 -Ref: configuration file307273 -Ref: settings307273 -Ref: convert308474 -Node: Interactive mode311441 -Ref: history313594 -Node: GUI314899 -Node: GUI installation315402 -Node: GUI usage316544 -Node: PostScript to Asymptote317447 -Node: Help318203 -Node: Debugger319939 -Node: Credits321724 -Node: Index322637 +Node: Drawing commands32432 +Node: draw34143 +Ref: arrows35291 +Node: fill40534 +Ref: gradient shading41578 +Node: clip45806 +Node: label46398 +Ref: Label47097 +Node: Bezier curves52822 +Node: Programming56399 +Ref: array iteration57213 +Node: Data types58295 +Ref: format67303 +Node: Paths and guides70906 +Ref: circle71160 +Ref: arctime76648 +Ref: extension80503 +Node: Pens87186 +Ref: fillrule94552 +Ref: basealign95449 +Ref: transparency98274 +Ref: makepen101717 +Ref: overwrite102555 +Node: Transforms103765 +Node: Frames and pictures105556 +Ref: envelope106697 +Ref: size107780 +Ref: unitsize108767 +Ref: shipout109827 +Ref: filltype112160 +Ref: add115297 +Ref: add about116243 +Ref: tex119181 +Node: Files120055 +Ref: cd121020 +Ref: scroll125452 +Node: Variable initializers128525 +Node: Structures131138 +Node: Operators138582 +Node: Arithmetic & logical138896 +Node: Self & prefix operators140870 +Node: User-defined operators141658 +Node: Implicit scaling142569 +Node: Functions143132 +Ref: stack overflow145885 +Node: Default arguments146449 +Node: Named arguments147188 +Node: Rest arguments149350 +Node: Mathematical functions152160 +Node: Arrays156767 +Ref: sort163720 +Ref: tridiagonal166130 +Ref: solve167358 +Node: Slices171551 +Node: Casts175441 +Node: Import177406 +Node: Static182633 +Node: LaTeX usage185527 +Node: Base modules191001 +Node: plain193501 +Node: simplex194153 +Node: math194426 +Node: interpolate197117 +Node: geometry197396 +Node: trembling197990 +Node: stats198341 +Node: patterns198601 +Node: markers198837 +Node: tree200620 +Node: binarytree200808 +Node: drawtree201397 +Node: syzygy201601 +Node: feynman201875 +Node: roundedpath202150 +Node: animation202433 +Ref: animate202850 +Node: embed203989 +Node: slide205778 +Node: MetaPost206118 +Node: unicode206834 +Node: latin1207722 +Node: babel208090 +Node: labelpath208319 +Node: labelpath3209139 +Node: annotate209450 +Node: CAD209921 +Node: graph210231 +Ref: ticks217360 +Ref: pathmarkers230639 +Ref: marker231104 +Ref: markuniform231455 +Ref: errorbars233246 +Ref: automatic scaling237302 +Node: palette247948 +Ref: images248066 +Ref: image252237 +Ref: logimage252715 +Ref: penimage253521 +Node: three253965 +Ref: PostScript3D278507 +Node: obj280199 +Node: graph3280451 +Ref: GaussianSurface285576 +Node: grid3286661 +Node: solids287401 +Node: tube288349 +Node: flowchart290584 +Node: contour295153 +Node: contour3300278 +Node: slopefield300585 +Node: ode302022 +Node: Options302282 +Ref: configuration file308078 +Ref: settings308078 +Ref: convert309279 +Node: Interactive mode312246 +Ref: history314399 +Node: GUI315704 +Node: GUI installation316207 +Node: GUI usage317337 +Node: PostScript to Asymptote318240 +Node: Help318996 +Node: Debugger320732 +Node: Credits322517 +Node: Index323430 End Tag Table diff --git a/Master/texmf/doc/man/man1/asy.man1.pdf b/Master/texmf/doc/man/man1/asy.man1.pdf Binary files differindex 98a595590e9..828913944e0 100644 --- a/Master/texmf/doc/man/man1/asy.man1.pdf +++ b/Master/texmf/doc/man/man1/asy.man1.pdf diff --git a/Master/texmf/doc/texlive/texlive-en/tex-live.sty b/Master/texmf/doc/texlive/texlive-en/tex-live.sty index 12c93ff37fd..3ee1ab27a12 100644 --- a/Master/texmf/doc/texlive/texlive-en/tex-live.sty +++ b/Master/texmf/doc/texlive/texlive-en/tex-live.sty @@ -34,7 +34,7 @@ \DefineVerbatimEnvironment{fverbatim}{Verbatim}{fontsize=\footnotesize} \DefineVerbatimEnvironment{sverbatim}{Verbatim}{fontsize=\small} \DefineVerbatimEnvironment{boxedverbatim} - {Verbatim}{fontsize=\scriptsize,frame=single} + {Verbatim}{fontsize=\footnotesize,frame=single} \DefineVerbatimEnvironment{Verbatim}{Verbatim}{fontsize=\normalsize} \def\verbatiminput#1{\VerbatimInput[fontsize=\scriptsize]{#1}} \def\boxedverbatiminput#1{\VerbatimInput[frame=single,fontsize=\scriptsize]{#1}} @@ -195,7 +195,7 @@ \HCode{\string&\#x1EBF;}\fi~Th\`anh} \def\XEmTeX{\textrm{XEm}\TeX\xspace} \def\XEmacs{\textrm{XEmacs}\xspace} -\def\XeTeX{Xe\TeX\xspace} +\def\XeTeX{Xe\TeX} \def\Webc{Web2C} \providecommand*{\CD}{\acro{CD}\xspace} \providecommand*{\CTAN}{\acro{CTAN}\xspace} diff --git a/Master/texmf/doc/texlive/texlive-en/texlive-en.tex b/Master/texmf/doc/texlive/texlive-en/texlive-en.tex index 8fd453fd05c..b035c70cc61 100644 --- a/Master/texmf/doc/texlive/texlive-en/texlive-en.tex +++ b/Master/texmf/doc/texlive/texlive-en/texlive-en.tex @@ -13,14 +13,14 @@ \title{% {\huge \textit{The \TeX\ Live Guide}\\\smallskip}% - {\LARGE \textsf{\TL{} 2009}}% + {\LARGE \textsf{\TL{} 2010}}% } \author{Karl Berry, editor \\[3mm] \url{http://tug.org/texlive/} } -\date{November 2009} +\date{July 2010} \maketitle @@ -56,10 +56,9 @@ see the end of the document, section~\ref{sec:history} \subsection{Operating system support} \label{sec:os-support} -\TL{} contains binaries for many Unix-based architectures, including -\GNU/Linux and \MacOSX. There are also Cygwin binaries. The -included sources can be compiled on platforms for which we do not -have binaries. +\TL{} contains binaries for many Unix-based platforms, including +\GNU/Linux, \MacOSX, and Cygwin. The included sources can be compiled +on platforms for which we do not provide binaries. As to Windows: only Windows 2000 and later are supported. Windows~9\textit{x}, \acro{ME} and \acro{NT} have been @@ -74,14 +73,14 @@ for Windows and \MacOSX. \subsection{Basic installation of \protect\TL{}} \label{sec:basic} -You can install \TL{} either from \DVD{} or over the Internet. The net -installer itself is small, and downloads everything requested from the -Internet. +You can install \TL{} either from \DVD{} or over the Internet +(\url{http://tug.org/texlive/acquire.html}). The net installer itself is +small, and downloads everything requested from the Internet. The \DVD{} installer lets you install to a local disk, but you can also run \TL{} directly from the \DVD{} (or from a \DVD{} image, if your -system supports that). Installation is described in later sections, but -here is a quick start: +system supports that). Installation is described in later sections +(\p.\pageref{sec:install}), but here is a quick start: \begin{itemize*} @@ -239,15 +238,15 @@ a subdirectory \dirname{texlive}, not at the top level of the disc. \item[readme-*.dir] Quick overview and useful links for \TL{}, in various languages, in both \HTML{} and plain text. % -\item[source] The source to all included programs, including the main \Webc{} - \TeX{} and \MF{} distributions. +\item[source] The source to all included programs, including the main + \Webc{}-based \TeX{} distributions. % \item[texmf] See \dirname{TEXMFMAIN} below. % \item[texmf-dist] See \dirname{TEXMFDIST} below. % \item[tlpkg] Scripts, programs and data for managing the - installation, and some special support for Windows. + installation, and special support for Windows. \end{ttdescription} In addition to the directories above, the installation scripts and @@ -265,13 +264,14 @@ This \TL\ documentation itself is in \dirname{texmf/doc/texlive}, available in several languages: \begin{itemize*} -\item{Simplified Chinese:} \OnCD{texmf/doc/texlive/texlive-zh-cn} \item{Czech/Slovak:} \OnCD{texmf/doc/texlive/texlive-cz} +\item{German:} \OnCD{texmf/doc/texlive/texlive-de} \item{English:} \OnCD{texmf/doc/texlive/texlive-en} \item{French:} \OnCD{texmf/doc/texlive/texlive-fr} -\item{German:} \OnCD{texmf/doc/texlive/texlive-de} +\item{Italian:} \OnCD{texmf/doc/texlive/texlive-it} \item{Polish:} \OnCD{texmf/doc/texlive/texlive-pl} \item{Russian:} \OnCD{texmf/doc/texlive/texlive-ru} +\item{Simplified Chinese:} \OnCD{texmf/doc/texlive/texlive-zh-cn} \end{itemize*} \subsection{Overview of the predefined texmf trees} @@ -295,16 +295,16 @@ directories in your installation. installations of additional or updated macros, fonts, etc. The expansion of this variable dynamically adjusts for each user to their own individual directory. -\item [TEXMFCONFIG] The tree used by the utilities +\item [TEXMFCONFIG] The (personal) tree used by the utilities \verb+texconfig+, \verb+updmap+, and \verb+fmtutil+ to store modified - configuration data. Under \envname{TEXMFHOME} by default. -\item [TEXMFSYSCONFIG] The tree used by the utilities + configuration data. +\item [TEXMFSYSCONFIG] The (site-wide) tree used by the utilities \verb+texconfig-sys+, \verb+updmap-sys+, and \verb+fmtutil-sys+ to store modified configuration data. -\item [TEXMFVAR] The tree used by \verb+texconfig+, \verb+updmap+ and - \verb+fmtutil+ to store (cached) runtime data such as format files and - generated map files. Under \envname{TEXMFHOME} by default. -\item [TEXMFSYSVAR] The tree used by \verb+texconfig-sys+, +\item [TEXMFVAR] The (personal) tree used by \verb+texconfig+, + \verb+updmap+ and \verb+fmtutil+ to store (cached) runtime data such + as format files and generated map files. Also used by \ConTeXt\ Mk\acro{IV}. +\item [TEXMFSYSVAR] The (site-wide) tree used by \verb+texconfig-sys+, \verb+updmap-sys+ and \verb+fmtutil-sys+, and also by \verb+tlmgr+, to store (cached) runtime data such as format files and generated map files. \end{ttdescription} @@ -314,14 +314,14 @@ The default layout is: \begin{description} \item[system-wide root] can span multiple \TL{} releases: \begin{ttdescription} - \item[2008] A previous release. - \item[2009] The current release. + \item[2009] A previous release. + \item[2010] The current release. \begin{ttdescription} \item [bin] ~ \begin{ttdescription} \item [i386-linux] \GNU/Linux binaries \item [...] - \item [universal-darwin] \MacOSX binaries + \item [universal-darwin] \MacOSX\ binaries \item [win32] Windows binaries \end{ttdescription} \item [texmf\ \ \ \ \ \ \ ] This is \envname{TEXMFMAIN}. @@ -335,9 +335,9 @@ The default layout is: \item[user's home] (\texttt{\$HOME} or \texttt{\%USERPROFILE\%}) \begin{ttdescription} - \item[.texlive2008] Privately generated and configuration data - for a previous release. \item[.texlive2009] Privately generated and configuration data + for a previous release. + \item[.texlive2010] Privately generated and configuration data for the current release. \begin{ttdescription} \item [texmf-var\ \ \ ] \envname{TEXMFVAR} @@ -395,7 +395,7 @@ for performing complex transformations on arbitrary input. Omega is no longer included in \TL{} as a separate program; only Aleph is provided: \item [Aleph] combines the \OMEGA\ and \eTeX\ extensions. -See \OnCD{texmf-dist/doc/aleph/base} for some minimal documentation. +See \OnCD{texmf-dist/doc/aleph/base}. \end{description} @@ -406,7 +406,7 @@ Here are a few other commonly-used programs included in \TL{}: \begin{cmddescription} -\item [bibtex] bibliography support. +\item [bibtex, bibtex8] bibliography support. \item [makeindex, xindy] index support. @@ -420,11 +420,12 @@ Here are a few other commonly-used programs included in \TL{}: from \dvi{} files. \item [dvipdfmx] convert \dvi{} to \acro{PDF}, an alternative approach -to pdf\TeX\ (mentioned above). See the \pkgname{ps4pdf} and -\pkgname{pdftricks} packages for still more alternatives. +to pdf\TeX\ (mentioned above). \item [psselect, psnup, \ldots] \PS{} utilities. +\item [pdfjam, pdfjoin, \ldots] \acro{PDF} utilities. + \item [texexec, texmfstart] Con\TeX{}t and \acro{PDF} processor. \item [tex4ht] \TeX{} to \acro{HTML} (and \acro{XML} and more) converter. @@ -523,8 +524,8 @@ is prepared for \MacOSX, named Mac\TeX\ (\url{http://tug.org/mactex}). We recommend using the native Mac\TeX\ installer instead of the \TL\ installer on \MacOSX, because the native installer makes a few Mac-specific adjustments, in particular to allow easily switching -between the various \TeX\ distributions for \MacOSX\ (Mac\TeX, gw\TeX, -Fink, MacPorts, \ldots). +between the various \TeX\ distributions for \MacOSX\ (Mac\TeX, Fink, +MacPorts, \ldots). Mac\TeX\ is firmly based on \TL, and the main \TeX\ trees are precisely the same. It does add a few extra folders with Mac-specific @@ -565,16 +566,16 @@ For a complete listing of the various options: \begin{figure}[tb] \begin{boxedverbatim} -Installing TeX Live 2009 from: ... +Installing TeX Live 2010 from: ... Platform: i386-linux => 'Intel x86 with GNU/Linux' -Distribution: live (uncompressed) +Distribution: inst (compressed) ... Detected platform: Intel x86 with GNU/Linux - <B> binary systems: 1 out of 14 + <B> binary systems: 1 out of 19 <S> Installation scheme (scheme-full) - 83 collections out of 84, disk space required: 1882 MB + 84 collections out of 85, disk space required: 2256 MB Customizing installation scheme: <C> standard collections @@ -582,26 +583,15 @@ Distribution: live (uncompressed) <D> directories: TEXDIR (the main TeX directory): - /usr/local/texlive/2009 - TEXMFLOCAL (directory for site-wide local files): - /usr/local/texlive/texmf-local - TEXMFSYSVAR (directory for variable and automatically generated data): - /usr/local/texlive/2009/texmf-var - TEXMFSYSCONFIG (directory for local config): - /usr/local/texlive/2009/texmf-config - TEXMFHOME (directory for user-specific files): - ~/texmf + /usr/local/texlive/2010 + ... <O> options: [ ] use letter size instead of A4 by default - [X] create all format files - [X] install macro/font doc tree - [X] install macro/font source tree - [ ] create symlinks to standard directories - - <V> set up for running from DVD - -Other actions: + [X] allow execution of restricted list of programs via \write18 + ... + +Actions: <I> start installation to hard disk <H> help <Q> quit @@ -634,8 +624,8 @@ recommended: \begin{itemize*} \item \filename{fontconfig} [needed by \XeTeX] \item \filename{ghostscript} [needed by various utilities] -\item \filename{libXaw7} [needed by xdvi] -\item \filename{ncurses} [provides the 'clear' command used by the installer] +\item \filename{libXaw7} [needed by \code{xdvi}] +\item \filename{ncurses} [provides the \code{clear} command used by the installer] \end{itemize*} \subsubsection{The text installer} @@ -668,7 +658,7 @@ This mode can be invoked explicitly with \subsubsection{The simple wizard installer} Under Windows, the default is to run the simplest installation method we -could devise, which we named the ``wizard'' installer. It installs +could devise, called the ``wizard'' installer. It installs everything and asks almost no questions. If you want to customize your setup, you should run one of the other installers. @@ -687,24 +677,29 @@ few notes about the various options and submenus. \subsubsection{Binary systems menu (Unix only)} \label{sec:binary} -\begin{figure}[tbh] +\begin{figure}[tb] \begin{boxedverbatim} Available sets of binaries: =============================================================================== - a [ ] alpha-linux DEC Alpha with GNU/Linux - b [ ] i386-cygwin Intel x86 with Cygwin - c [X] i386-linux Intel x86 with GNU/Linux - d [ ] i386-netbsd Intel x86 with NetBSD - e [ ] i386-solaris Intel x86 with Sun Solaris - f [ ] mips-irix SGI IRIX - g [ ] powerpc-aix PowerPC with AIX - h [ ] powerpc-linux PowerPC with GNU/Linux - i [ ] sparc-linux Sparc with GNU/Linux - j [ ] sparc-solaris Sparc with Solaris - k [ ] universal-darwin universal binaries for MacOSX/Darwin - l [ ] win32 Windows - m [ ] x86_64-linux x86_64 with GNU/Linux + b [ ] amd64-freebsd x86_64 with FreeBSD + c [ ] amd64-kfreebsd x86_64 with GNU/FreeBSD + d [ ] i386-cygwin Intel x86 with Cygwin + e [ ] i386-freebsd Intel x86 with FreeBSD + f [ ] i386-kfreebsd Intel x86 with GNU/FreeBSD + g [X] i386-linux Intel x86 with GNU/Linux + h [ ] i386-netbsd Intel x86 with NetBSD + i [ ] i386-solaris Intel x86 with Solaris + j [ ] mips-irix SGI IRIX + k [ ] powerpc-aix PowerPC with AIX + l [ ] powerpc-linux PowerPC with GNU/Linux + m [ ] sparc-linux Sparc with GNU/Linux + o [ ] sparc-solaris Sparc with Solaris + p [ ] universal-darwin universal binaries for MacOSX/Darwin + s [ ] win32 Windows + t [ ] x86_64-darwin x86_64 with MacOSX/Darwin + u [ ] x86_64-linux x86_64 with GNU/Linux + v [ ] x86_64-solaris x86_64 with Solaris \end{boxedverbatim} \caption{Binaries menu}\label{fig:bin-text} \end{figure} @@ -712,7 +707,7 @@ Available sets of binaries: Figure~\ref{fig:bin-text} displays the text mode binaries menu. By default, only the binaries for your current platform will be installed. From this menu, you can select installation of binaries for other -architectures as well. This can be useful if you are sharing a \TeX\ +platforms as well. This can be useful if you are sharing a \TeX\ tree across a network of heterogenous machines, or for a dual-boot system. @@ -727,26 +722,24 @@ Select a scheme: b [ ] ConTeXt scheme c [X] full scheme (everything) d [ ] GUST TeX Live scheme - e [ ] GUTenberg TeX Live scheme - f [ ] medium scheme (plain, latex, recommended packages, some languages) - g [ ] minimal scheme (plain only) - h [ ] Omega scheme - i [ ] teTeX scheme (more than medium, but nowhere near full) - j [ ] XML scheme - k [ ] custom selection of collections + e [ ] medium scheme (plain, latex, recommended packages, some languages) + f [ ] minimal scheme (plain only) + g [ ] teTeX scheme (more than medium, but nowhere near full) + h [ ] XML scheme + i [ ] custom selection of collections \end{boxedverbatim} \caption{Scheme menu}\label{fig:scheme-text} \end{figure} Figure~\ref{fig:scheme-text} displays the \TL\ scheme menu; from here, you choose a ``scheme'', which is an overall set of package collections. -The default \optname{full} scheme installs everything available, but you -can also choose the \optname{basic} scheme for a small system, -\optname{minimal} for testing purposes, and \optname{medium} or -\optname{teTeX} to get something in between. There are also various -specialized and country-specific schemes. +The default \optname{full} scheme installs everything available. This +is recommended, but you can also choose the \optname{basic} scheme for a +small system, \optname{minimal} for testing purposes, and +\optname{medium} or \optname{teTeX} to get something in between. There +are also various specialized and country-specific schemes. -\begin{figure}[tbh] +\begin{figure}[tb] \tlpng{stdcoll}{.7\linewidth} \caption{Collections menu}\label{fig:collections-gui} \end{figure} @@ -770,9 +763,8 @@ at the package level. The default layout is described in section~\ref{sec:texmftrees}, \p.\pageref{sec:texmftrees}. The default location of -\dirname{TEXDIR} is different between Windows -(|%SystemDrive%\texlive\2009|) and Unix -(\dirname{/usr/local/texlive/2009}). +\dirname{TEXDIR} is \dirname{/usr/local/texlive/2010} On Unix +and |%SystemDrive%\texlive\2010| on Windows. The main reason to change this default is if you lack write permission for the default location. You don't have to be root or administrator to @@ -780,7 +772,7 @@ install \TL, but you do need write access to the target directory. A reasonable alternative choice is a directory under your home directory, especially if you will be the sole user. Use -`|~|' to indicate this, as in `|~/texlive/2009|'. +`|~|' to indicate this, as in `|~/texlive/2010|'. We recommend including the year in the name, to enable keeping different releases of \TL{} side by side. (You may wish to make a @@ -798,12 +790,25 @@ newly-written configuration files, since it usefully refers to the home directory of any individual running \TeX. It expands to \dirname{$HOME} on Unix and \verb|%USERPROFILE%| on Windows. +\dirname{TEXMFVAR} is the location for storing cached runtime data +specific to each user. This includes the \ConTeXt\ Mk\acro{IV} cache, which +is created at installation time. xxxx +\subsubsection{\ConTeXt{} Mark IV} + +xxxxThe `old' \ConTeXt{} should run out of the box. The new `Mark IV' +\ConTeXt{} will require manual setup; see +\url{http://wiki.contextgarden.net/Running_Mark_IV}. + + \subsubsection{Options} \label{sec:options} \begin{figure}[tbh] \begin{boxedverbatim} +Current options setup: +=============================================================================== <P> use letter size instead of A4 by default: [ ] + <E> execution of restricted list of programs: [X] <F> create format files: [X] <D> install font/macro doc tree: [X] <S> install font/macro source tree: [X] @@ -816,13 +821,18 @@ directory of any individual running \TeX. It expands to \end{figure} Figure~\ref{fig:options-text} shows the text mode options menu. -More info: +More info on each: \begin{description} \item[use letter size instead of A4 by default:] The default paper size selection. Of course, individual documents can and should specify a specific paper size, if desired. +\item[execution of restricted list of programs:] As of \TL\ 2010, + execution of a few external programs is allowed by default. The (very + short) list of allowed programs is given in the \filename{texmf.cnf}. + See the 2010 news (section~\ref{sec:2010news}) for more details. + \item[create format files:] Although unnecessary format files take time to generate and disk space to store, it is still recommended to leave this option checked: if you don't, then format files will be @@ -831,14 +841,6 @@ More info: (say) binaries or hyphenation patterns are updated in the installation, and thus could end up with incompatible format files. -\begin{comment} -\item[execution of restricted list of programs:] As of \TL\ 2009, - execution of a few external programs is allowed by default. The list - of allowed programs is given in the \filename{texmf.cnf}; it is very - small, but still very useful. See the 2009 news - (section~\ref{sec:2009news}) for more details. -\end{comment} - \item[install font/macro \ldots\ tree:] These options allow you to omit downloading/installing the documentation and source files present in most packages. Not recommended. @@ -873,16 +875,9 @@ as in figure~\ref{fig:main-fromdvd}. ... <D> directories: TEXDIRW (Writable root): - !! default location: /usr/local/texlive/2009 + !! default location: /usr/local/texlive/20010 !! is not writable, please select a different one! - TEXMFLOCAL (directory for site-wide local files): - /usr/local/texlive/texmf-local - TEXMFSYSVAR (directory for variable and automatically generated data): - /usr/local/texlive/2009/texmf-var - TEXMFSYSCONFIG (directory for local config): - /usr/local/texlive/2009/texmf-config - TEXMFHOME (directory for user-specific files): - ~/texmf + ... <O> options: [ ] use letter size instead of A4 by default @@ -890,7 +885,7 @@ as in figure~\ref{fig:main-fromdvd}. <V> set up for installing to hard disk -Other actions: +Actions: <I> start installation for running from DVD <H> help <Q> quit @@ -900,7 +895,7 @@ Other actions: Note the changes: all options about what to install have disappeared, and the directories section now talks about -\dirname{TEXDIRW} or writable root. The symlinks option has also +\dirname{TEXDIRW} and a ``writable root''. The symlinks option has also disappeared. The installer will still create various directories and configuration @@ -941,11 +936,11 @@ to introduce option names. These are the most common ones: \item[-lang {\sl LL}] Specify the installer interface language as its standard two-letter code \textsl{LL}. Currently supported languages: English (\texttt{en}, default), German - (\texttt{de}), French (\texttt{fr}), Dutch (\texttt{nl}), Polish - (\texttt{pl}), Slovenian (\texttt{sl}) and Vietnamese - (\texttt{vi}). The installer tries to determine the right language - itself but if it fails, or if the right language is not available, - then it uses English as a fallback. + (\texttt{de}), French (\texttt{fr}), Italian (\texttt{it}), Dutch + (\texttt{nl}), Polish (\texttt{pl}), Slovenian (\texttt{sl}) and + Vietnamese (\texttt{vi}). The installer tries to determine the right + language itself but if it fails, or if the right language is not + available, then it uses English as a fallback. \item[-profile {\sl file}] The installer always writes a file \filename{texlive.profile} to the \dirname{tlpkg} subdirectory of your @@ -971,8 +966,8 @@ location, trailing `\texttt{/}' characters and/or a trailing For example, you could choose a particular \CTAN\ mirror with something like: \url{http://ctan.example.org/tex-archive/systems/texlive/tlnet/}, -substituting a real hostname and its particular top-level -\CTAN\ path for |ctan.example.org|. The list of \CTAN\ mirrors is +substituting a real hostname and its particular top-level \CTAN\ path +for |ctan.example.org/tex-archive|. The list of \CTAN\ mirrors is maintained at \url{http://ctan.org/mirrors}. If the given argument is local (either a path or a \texttt{file:/} url), @@ -1014,18 +1009,18 @@ might be \filename{$HOME/.profile} (or another file sourced by \filename{.profile}, and the lines to add would look like this: \begin{sverbatim} -PATH=/usr/local/texlive/2009/bin/i386-linux:$PATH; export PATH -MANPATH=/usr/local/texlive/2009/texmf/doc/man:$MANPATH; export MANPATH -INFOPATH=/usr/local/texlive/2009/texmf/doc/info:$INFOPATH; export INFOPATH +PATH=/usr/local/texlive/2010/bin/i386-linux:$PATH; export PATH +MANPATH=/usr/local/texlive/2010/texmf/doc/man:$MANPATH; export MANPATH +INFOPATH=/usr/local/texlive/2010/texmf/doc/info:$INFOPATH; export INFOPATH \end{sverbatim} For csh or tcsh, the file to edit is typically \filename{$HOME/.cshrc}, and the lines to add might look like: \begin{sverbatim} -setenv PATH /usr/local/texlive/2009/bin/i386-linux:$PATH -setenv MANPATH /usr/local/texlive/2009/texmf/doc/man:$MANPATH -setenv INFOPATH /usr/local/texlive/2009/texmf/doc/info:$INFOPATH +setenv PATH /usr/local/texlive/2010/bin/i386-linux:$PATH +setenv MANPATH /usr/local/texlive/2010/texmf/doc/man:$MANPATH +setenv INFOPATH /usr/local/texlive/2010/texmf/doc/info:$INFOPATH \end{sverbatim} If you already have settings somewhere in your ``dot'' files, naturally @@ -1042,17 +1037,17 @@ Our two hints are: 1)~you may want to check for a file \filename{/etc/manpath.config} and, if present, add lines such as \begin{sverbatim} -MANPATH_MAP /usr/local/texlive/2009/bin/i386-linux \ - /usr/local/texlive/2009/texmf/doc/man +MANPATH_MAP /usr/local/texlive/2010/bin/i386-linux \ + /usr/local/texlive/2010/texmf/doc/man \end{sverbatim} And 2)~check for a file \filename{/etc/environment} which may define the search path and other default environment variables. -We also create a symbolic link named \code{man} in each (Unix) binary -directory. Some \code{man} programs, such as the standard \MacOSX\ -\code{man}, will automatically find that, obviating the need for any man -page setup. +In each (Unix) binary directory, we also create a symbolic link named +\code{man} to the directory \dirname{texmf/doc/man}. Some \code{man} +programs, such as the standard \MacOSX\ \code{man}, will automatically +find that, obviating the need for any man page setup. \subsubsection{Font configuration for \XeTeX} @@ -1099,14 +1094,14 @@ the \envname{PATH} environment variable, as described before. At the end of the installation, the installer should have printed a message giving the value to which \envname{TEXMFCNF} should be set. In case you missed it: this value is \dirname{$TEXMFSYSVAR/web2c}. For the -default, \dirname{/usr/local/texlive/2009/texmf-var/web2c}, you need the +default, \dirname{/usr/local/texlive/2010/texmf-var/web2c}, you need the lines \begin{sverbatim} -TEXMFCNF=/usr/local/texlive/2009/texmf-var/web2c; export TEXMFCNF +TEXMFCNF=/usr/local/texlive/2010/texmf-var/web2c; export TEXMFCNF \end{sverbatim} or, for [t]csh: \begin{sverbatim} -setenv TEXMFCNF /usr/local/texlive/2009/texmf-var/web2c +setenv TEXMFCNF /usr/local/texlive/2010/texmf-var/web2c \end{sverbatim} This option is most useful when you want to run \TL{} on your own @@ -1114,12 +1109,6 @@ system, but don't have enough disk space to install it. If you want a truly `portable' \TL{} that is self-contained, e.g., for a USB stick, see section~\ref{sec:portable-tl}. -\subsubsection{\ConTeXt{} Mark IV} - -The `old' \ConTeXt{} should run out of the box. The new `Mark IV' -\ConTeXt{} will require manual setup; see -\url{http://wiki.contextgarden.net/Running_Mark_IV}. - \subsubsection{Integrating local and personal macros} \label{sec:local-personal-macros} @@ -1154,8 +1143,8 @@ This is unfortunately a messy topic. Forget about it unless you want to delve into many details of the \TeX{} installation. Don't forget to check first what you get for free: see section~\ref{sec:tl-fonts}. -A possible alternative is to use \XeTeX (see -section~\ref{sec:tex-extensions}), which lets you use operating system +A possible alternative is to use \XeTeX\ or Lua\TeX\ (see +section~\ref{sec:tex-extensions}), which let you use operating system fonts without any installation in \TeX. If you do need to do this, see @@ -1179,9 +1168,9 @@ the principles are the same. place: \begin{alltt} > \Ucom{tex -{}-version} -TeX 3.1415926 (TeX Live 2009) -kpathsea version 5.0.0 -Copyright 2009 D.E. Knuth. +TeX 3.1415926 (TeX Live 2010) +kpathsea version 6.0.0 +Copyright 2010 D.E. Knuth. ... \end{alltt} If this comes back with `command not found' instead of version and @@ -1192,7 +1181,7 @@ the environment-setting information on \p.\pageref{sec:env}. \item Process a basic \LaTeX{} file: \begin{alltt} > \Ucom{latex sample2e.tex} -This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009) +pdfTeX 3.1415926-1.40.11-2.2 (TeX Live 2010) ... Output written on sample2e.dvi (3 pages, 7484 bytes). Transcript written on sample2e.log. @@ -1303,24 +1292,25 @@ Links for some other tools you may consider installing: \MacOSX\ as part of \TL. \item \cmdname{Vim} is free software, available from \url{http://www.vim.org}. - \item \cmdname{WinShell} is available from \url{http://www.winshell.de}. \item \cmdname{WinEdt} is shareware available though \url{http://tug.org/winedt} or \url{http://www.winedt.com}. + \item \cmdname{WinShell} is available from \url{http://www.winshell.de}. \end{itemize*} \end{description} For a much longer list of packages and programs, see \url{http://tug.org/interest.html}. + \section{Network installations} \label{sec:netinstall} -\TL{} has been designed to be shared between different users, and even -different systems on a network. With a standard directory layout, no -hard paths are configured: the locations for files needed by \TL{} -programs are found relative to the programs. You can see this in the -principal configuration file \filename{$TEXMFMAIN/web2c/texmf.cnf}, -which contains lines such as +\TL{} has been designed to be sharable between different users on one +system, and/or between different systems on a network. With a standard +directory layout, no hard paths are configured: the locations for files +needed by \TL{} programs are found relative to the programs. You can +see this in the principal configuration file +\filename{$TEXMFMAIN/web2c/texmf.cnf}, which contains lines such as \begin{sverbatim} TEXMFMAIN = $SELFAUTOPARENT/texmf ... @@ -1348,14 +1338,14 @@ section~\ref{sec:fromdvd} is fine for your own system, but if you are a guest on somebody else's system then you would probably like something with minimal side effects. -In the root of the \TL{} \DVD, or the \dirname{texlive} subdirectory of -the \TK{} \DVD, are a \filename{tl-portable} script (Unix) and a -\filename{tl-portable.bat} batch file (Windows) which start up a -secondary shell\slash command prompt with environment settings -for directly accessing the \TL{} on the \DVD. +In the root of the \TL{} installation, or the \dirname{texlive} +subdirectory of the \TK{} \DVD, are a \filename{tl-portable} script +(Unix) and a \filename{tl-portable.bat} batch file (Windows) which start +up a secondary shell\slash command prompt with environment settings for +directly accessing the \TL{} on the \DVD. When it runs for the first time, some files will be generated in a -directory \dirname{~/.tlportable2009}, which will take a little time. +directory \dirname{~/.tlportable2010}, which will take a little time. On subsequent runs, though, it will start almost instantaneously. The rest of the system will be unaware of \TL. If you want your editor @@ -1403,7 +1393,7 @@ include: \item installing, updating, backing up, restoring, and uninstalling individual packages, optionally taking dependencies into account; \item searching for and listing packages, etc.; -\item listing, adding, and removing architectures; +\item listing, adding, and removing platforms; \item changing installation options such as paper size and source location (see section~\ref{sec:location}). \end{itemize*} @@ -1416,7 +1406,7 @@ with installations which run from \DVD. > \Ucom{tlmgr -gui} \end{alltt} or in Windows via the Start menu: \texttt{Start}, \texttt{Programs}, -\texttt{TeX Live 2009}, \texttt{TeX Live Manager}. After clicking `Load' +\texttt{TeX Live 2010}, \texttt{TeX Live Manager}. After clicking `Load' it displays a list of available and installed packages\Dash the latter prepended with `(i)'. This assumes of course that the installation source is valid and reachable. @@ -1457,12 +1447,12 @@ running post install action for xetex install: xetex-def ... running mktexlsr -mktexlsr: Updating /usr/local/texlive/2009/texmf/ls-R... +mktexlsr: Updating /usr/local/texlive/2010/texmf/ls-R... ... running fmtutil-sys --missing ... Transcript written on xelatex.log. -fmtutil: /usr/local/texlive/2009/texmf-var/web2c/xetex/xelatex.fmt installed. +fmtutil: /usr/local/texlive/2010/texmf-var/web2c/xetex/xelatex.fmt installed. \end{fverbatim} As you can see, \prog{tlmgr} installs dependencies, and takes care of any @@ -1546,19 +1536,19 @@ pieces: the font-creation window. More information can be found in the (highly recommended) on-line help. -\item[TeXworks.] \TeX{}works is a \TeX-oriented editor with - an integrated \acro{PDF} viewer. It comes already preconfigured for \TL. +\item[\TeX{}works.] \TeX{}works is a \TeX-oriented editor with + an integrated \acro{PDF} viewer. \item[Command-line tools.] A number of Windows ports of common Unix command-line programs are installed along with the usual \TL{} binaries. These include \cmdname{gzip}, \cmdname{unzip} and the - command-line utilities from the \cmdname{xpdf} suite. The - \cmdname{xpdf} viewer itself is not available for - Windows. Instead, you can download the Sumatra \acro{PDF} viewer, - which is based on xpdf, from - \url{http://blog.kowalczyk.info/software/sumatrapdf}. + utilities from the \cmdname{xpdf} suite (\cmdname{pdfinfo}, + \cmdname{pdffonts}, \ldots). The \cmdname{xpdf} viewer itself is not + available for Windows. Instead, you can download the Sumatra + \acro{PDF} viewer, which is based on xpdf, from + \url{http://blog.kowalczyk.info/software/sumatrapdf}, among other options. -\item[fc-list, fc-cache et al.] The tools from the fontconfig library allow +\item[fc-list, fc-cache, \ldots] The tools from the fontconfig library allow \XeTeX{} to handle system fonts on Windows. You can use \prog{fc-list} to determine the font names to pass to Xe\TeX's extended \cs{font} command. If necessary, run \prog{fc-cache} @@ -2503,10 +2493,10 @@ would have never existed. \item Michel Goossens, who co-authored the original documentation. -\item Eitan Gurari, whose \TeX4ht was used to create the \HTML{} -version of this documentation, and who worked tirelessly to improve -it at short notice. Eitan prematurely passed away in June 2009, and we -dedicate this documentation to his memory. +\item Eitan Gurari, whose \TeX4ht is used to create the \HTML{} +version of this documentation, and who worked tirelessly to improve it +at short notice, every year. Eitan prematurely passed away in June +2009, and we dedicate this documentation to his memory. \item Hans Hagen, for much testing and making his \ConTeXt\ format (\url{http://pragma-ade.com}) work within \TL's framework. @@ -2593,31 +2583,30 @@ support, and much integration and testing. \end{itemize*} Builders of the binaries: +Alan Braslau (\pkgname{amd64-kfreebsd}, \pkgname{i386-kfreebsd}), Peter Breitenlohner (\pkgname{x86\_64-linux}), -%Tim Arnold (\pkgname{hppa-hpux}), -%Randy Au (\pkgname{amd64-freebsd}), -%Edd Barrett (\pkgname{i386-openbsd}), Karl Berry (\pkgname{i386-linux}, \pkgname{sparc-linux}), Ken Brown (\pkgname{i386-cygwin}), Akira Kakuto (\pkgname{win32}), -Dick Koch (\pkgname{universal-darwin}), -%Manfred Lotz (\pkgname{i386-freebsd}), +Dick Koch (\pkgname{universal-darwin}, \pkgname{x86\_64-darwin}), +Nikola Le\v{c}i\'c (\pkgname{amd64-freebsd}, \pkgname{i386-freebsd}), Norbert Preining (\pkgname{alpha-linux}), -%Arthur Reutenauer (\pkgname{sparc-linux}), Jukka Salmi (\pkgname{i386-netbsd}), Thomas Schmitz (\pkgname{powerpc-linux}), -Apostolos Syropoulos (\pkgname{i386-solaris}), +Apostolos Syropoulos (\pkgname{i386-solaris}, \pkgname{x86\_64-solaris}), Vladimir Volovich (\pkgname{powerpc-aix}, \pkgname{sparc-solaris}), Olaf Weber (\pkgname{mips-irix}). For information on the \TL{} build process, see \url{http://tug.org/texlive/build.html}. Current documentation translators: +Boris Veytsman (Russian), Jjgod Jiang, Jinsong Zhao, Yue Wang, \& Helin Gai (Chinese), Klaus H\"oppner (German), Manuel P\'egouri\'e-Gonnard (French), +Marco Pallante (Italian), +Nikola Le\v{c}i\'c (Serbian), Petr Sojka \& Jan Busa (Czech\slash Slovak), -Boris Veytsman (Russian), Staszek Wawrykiewicz (Polish). The \TL{} documentation web page is \url{http://tug.org/texlive/doc.html}. @@ -3028,33 +3017,7 @@ Finally, the changes made by Donald Knuth in his `\TeX\ tuneup of 2008' are included in this release. See \url{http://tug.org/TUGboat/Articles/tb29-2/tb92knut.pdf}. - -% -\htmlanchor{news} -\subsection{Present} -\label{sec:tlcurrent} -\label{sec:2009news} % keep with 2009 - -\begin{comment} % last-minute disablement -In 2009, the most visible change is that pdf\AllTeX\ now -\emph{automatically} converts a requested Encapsulated PostScript (EPS) -file to PDF, via the \pkgname{epstopdf} package, when and if the \LaTeX\ -\code{graphics.cfg} configuration file is loaded, and PDF is being -output. The default options are intended to eliminate any chance of -hand-created PDF files being overwritten, but you can also prevent -\code{epstopdf} from being loaded at all by putting -|\newcommand{\DoNotLoadEpstopdf}{}| (or |\def...|) before the -\cs{documentclass} declaration. For details, see the epstopdf package -documentation (\url{http://ctan.org/pkg/epstopdf-pkg}). - -A related important change is that execution of a few external commands, -via the \cs{write18} feature, is now enabled by default\Dash for -example, \code{epstopdf}, \code{makeindex}, and \code{bibtex}. The -exact list of commands is defined in the \code{texmf.cnf} file. -Environments which must disallow all such external commands can deselect -this option in the installer (see section~\ref{sec:options}), or -override the value in \code{texmf.cnf} after installation. -\end{comment} +\subsubsection{2009} In 2009, the default output format for Lua\AllTeX\ is now PDF, to take advantage of Lua\TeX's OpenType support, et al. New executables named @@ -3108,15 +3071,74 @@ material such as \CD\ labels, are available at \url{ftp://tug.org/historic/systems/texlive}. +% +\htmlanchor{news} +\subsection{Present} +\label{sec:tlcurrent} +\label{sec:2010news} % keep with 2010 + +In 2010, the default version for PDF output is now 1.5, enabling more +compression. This applies to all the \TeX\ engines when used to produce +PDF and to \code{dvipdfmx}. Loading the \pkgname{pdf14} \LaTeX\ package +changes back to PDF~1.4, or set |\pdfminorversion=4|. + +pdf\AllTeX\ now \emph{automatically} converts a requested Encapsulated +PostScript (EPS) file to PDF, via the \pkgname{epstopdf} package, when +and if the \LaTeX\ \code{graphics.cfg} configuration file is loaded, and +PDF is being output. The default options are intended to eliminate any +chance of hand-created PDF files being overwritten, but you can also +prevent \code{epstopdf} from being loaded at all by putting +|\newcommand{\DoNotLoadEpstopdf}{}| (or |\def...|) before the +\cs{documentclass} declaration. It is also not loaded if the +\pkgname{pst-pdf} package is used. For more details, see the epstopdf +package documentation (\url{http://ctan.org/pkg/epstopdf-pkg}). + +A related change is that execution of a very few external commands from +\TeX, via the \cs{write18} feature, is now enabled by default. These +are commands are \code{repstopdf}, \code{makeindex}, \code{kpsewhich}, +\code{bibtex}, and \code{bibtex8}; the list is defined in +\code{texmf.cnf}. Environments which must disallow all such external +commands can deselect this option in the installer (see +section~\ref{sec:options}), or override the value after installation by +running |tlmgr conf texmf shell_escape 0|. + +Yet another related change is that \BibTeX\ and Makeindex now refuse to +write their output files to an arbitrary directory (like \TeX\ itself), +by default. This is so they can now be enabled for use by the +restricted \cs{write18}. To change this, the \envname{TEXMFOUTPUT} +environment variable can be set, or the |openout_any| setting changed. + +By default, tlmgr now saves one backup of each package updated +(\code{tlmgr option autobackup 1}), so broken packages +updates can be easily reverted with \code{tlmgr restore}. If +you do post-install updates, and don't have the disk space for the +backups, run \code{tlmgr option autobackup 0}. + +New programs included: the p\TeX\ engine and related utilities for +typesetting Japanese; the \BibTeX{}U program for Unicode-enabled +\BibTeX; the chktex utility (\url{http://baruch.ev-en.org/proj/chktex}) +for checking \AllTeX\ documents; the dvisvgm +(\url{http://dvisvgm.sourceforge.net}) DVI-to-SVG translator. + +A change in \TL{} 2009 that we failed to note: numerous \TeX4ht-related +executables (\url{http://tug.org/tex4ht}) were removed from the binary +directories. The generic \code{mk4ht} program can be used to run any of +the various \code{tex4ht} combinations. + +Finally, the \TL{} release on the \TK\ \DVD\ can no longer be run +live (oddly enough). A single \DVD\ no longer has enough room. One +benefit is that installation from the physical \DVD\ should now be much +faster. + + \subsection{Future} \emph{\TL{} is not perfect!} (And never will be.) We intend to continue to release new versions, and would like to provide more help material, more utilities, more installation programs, and (of course) an ever-improved and better-checked tree of macros and fonts. This work is -all done by hard-pressed volunteers in their limited spare time, and a -great deal remains to be done. Please see -\url{http://tug.org/texlive/contribute.html}. +all done by volunteers in their spare time, and so there is always more +to do. Please see \url{http://tug.org/texlive/contribute.html}. Please send corrections, suggestions, and offers of help to: \begin{quote} diff --git a/Master/tlpkg/asymptote/asy.exe b/Master/tlpkg/asymptote/asy.exe Binary files differindex d68dd6695fc..c72517c1b55 100755 --- a/Master/tlpkg/asymptote/asy.exe +++ b/Master/tlpkg/asymptote/asy.exe |