summaryrefslogtreecommitdiff
path: root/graphics/asymptote
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/asymptote')
-rw-r--r--graphics/asymptote/ChangeLog349
-rw-r--r--graphics/asymptote/GUI/icons_rc.py88
-rw-r--r--graphics/asymptote/GUI/xasy2asy.py4
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake4
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make12
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/Doxyfile8
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/Makefile24
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake6
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake4
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake16
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make78
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal158
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make2
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/Makefile72
-rw-r--r--graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake4
-rw-r--r--graphics/asymptote/ReleaseNotes20
-rw-r--r--graphics/asymptote/asy-keywords.el4
-rw-r--r--graphics/asymptote/asy.list127
-rw-r--r--graphics/asymptote/asymptote.spec2
-rw-r--r--graphics/asymptote/base/graph3.asy104
-rw-r--r--graphics/asymptote/base/grid3.asy5
-rw-r--r--graphics/asymptote/base/map.asy62
-rw-r--r--graphics/asymptote/base/mapArray.asy2
-rw-r--r--graphics/asymptote/base/plain_picture.asy28
-rw-r--r--graphics/asymptote/base/plain_prethree.asy4
-rw-r--r--graphics/asymptote/base/plain_shipout.asy2
-rw-r--r--graphics/asymptote/base/slide.asy13
-rw-r--r--graphics/asymptote/base/three.asy45
-rw-r--r--graphics/asymptote/base/three_surface.asy166
-rw-r--r--graphics/asymptote/base/v3dheadertypes.asy2
-rw-r--r--graphics/asymptote/base/v3dtypes.asy2
-rw-r--r--graphics/asymptote/base/webgl/asygl.js4
-rw-r--r--graphics/asymptote/bezierpatch.cc11
-rw-r--r--graphics/asymptote/camp.l2
-rw-r--r--graphics/asymptote/camperror.cc6
-rwxr-xr-xgraphics/asymptote/configure18
-rw-r--r--graphics/asymptote/configure.ac2
-rw-r--r--graphics/asymptote/dec.cc12
-rw-r--r--graphics/asymptote/doc/CAD.pdfbin198650 -> 198634 bytes
-rw-r--r--graphics/asymptote/doc/FAQ/asy-faq.info2
-rw-r--r--graphics/asymptote/doc/TeXShopAndAsymptote.pdfbin81194 -> 81317 bytes
-rw-r--r--graphics/asymptote/doc/asy-latex.pdfbin209115 -> 209115 bytes
-rw-r--r--graphics/asymptote/doc/asy.12
-rw-r--r--graphics/asymptote/doc/asyRefCard.pdfbin121145 -> 121145 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.pdfbin1249734 -> 1285295 bytes
-rw-r--r--graphics/asymptote/doc/asymptote.texi62
-rw-r--r--graphics/asymptote/doc/axis3.asy2
-rw-r--r--graphics/asymptote/doc/extra/intro.asy75
-rw-r--r--graphics/asymptote/doc/png/asymptote.info848
-rw-r--r--graphics/asymptote/drawsurface.cc4
-rw-r--r--graphics/asymptote/drawsurface.h6
-rw-r--r--graphics/asymptote/errormsg.cc25
-rw-r--r--graphics/asymptote/errormsg.h5
-rw-r--r--graphics/asymptote/examples/AiryDisk.asy2
-rw-r--r--graphics/asymptote/examples/RiemannSphere.asy1
-rw-r--r--graphics/asymptote/examples/RiemannSurface.asy2
-rw-r--r--graphics/asymptote/examples/RiemannSurfaceRoot.asy2
-rw-r--r--graphics/asymptote/examples/arrows3.asy2
-rw-r--r--graphics/asymptote/examples/clockarray.asy3
-rw-r--r--graphics/asymptote/examples/cyclohexane.asy4
-rw-r--r--graphics/asymptote/examples/elevation.asy2
-rw-r--r--graphics/asymptote/examples/extrudedcontour.asy5
-rw-r--r--graphics/asymptote/examples/filesurface.asy23
-rw-r--r--graphics/asymptote/examples/gamma3.asy4
-rw-r--r--graphics/asymptote/examples/pdb.asy5
-rw-r--r--graphics/asymptote/examples/projectelevation.asy5
-rw-r--r--graphics/asymptote/examples/slidedemo.asy2
-rw-r--r--graphics/asymptote/examples/smoothelevation.asy4
-rw-r--r--graphics/asymptote/examples/soccerball.asy2
-rw-r--r--graphics/asymptote/examples/splitpatch.asy2
-rw-r--r--graphics/asymptote/examples/teapot.asy12
-rw-r--r--graphics/asymptote/examples/truncatedIcosahedron.asy5
-rw-r--r--graphics/asymptote/examples/twistedtubes.asy2
-rw-r--r--graphics/asymptote/exp.cc2
-rw-r--r--graphics/asymptote/genv.cc2
-rw-r--r--graphics/asymptote/glrender.cc21
-rw-r--r--graphics/asymptote/glrender.h3
-rw-r--r--graphics/asymptote/impdatum.cc3
-rw-r--r--graphics/asymptote/jsfile.cc102
-rw-r--r--graphics/asymptote/lex.yy.cc2
-rw-r--r--graphics/asymptote/parser.cc2
-rw-r--r--graphics/asymptote/picture.cc14
-rw-r--r--graphics/asymptote/picture.h2
-rw-r--r--graphics/asymptote/revision.cc2
-rw-r--r--graphics/asymptote/runpicture.cc133
-rw-r--r--graphics/asymptote/runpicture.in7
-rw-r--r--graphics/asymptote/runsystem.cc49
-rw-r--r--graphics/asymptote/runsystem.in13
-rw-r--r--graphics/asymptote/settings.cc6
-rw-r--r--graphics/asymptote/shaders.cc15
-rw-r--r--graphics/asymptote/shaders.h4
-rw-r--r--graphics/asymptote/stack.cc13
-rw-r--r--graphics/asymptote/stm.cc2
-rw-r--r--graphics/asymptote/v3dheadertypes.h2
-rw-r--r--graphics/asymptote/v3dheadertypes.py2
-rw-r--r--graphics/asymptote/v3dtypes.h2
-rw-r--r--graphics/asymptote/v3dtypes.py2
-rw-r--r--graphics/asymptote/webgl/gl.js98
-rw-r--r--graphics/asymptote/webgl/license2
99 files changed, 1832 insertions, 1265 deletions
diff --git a/graphics/asymptote/ChangeLog b/graphics/asymptote/ChangeLog
index d328718705..895ee32655 100644
--- a/graphics/asymptote/ChangeLog
+++ b/graphics/asymptote/ChangeLog
@@ -1,3 +1,352 @@
+commit 344bbd8514fff4a25cede6be202cee6fdde35988
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 14 22:43:21 2024 -0700
+
+ Fix warning messages in example.
+
+commit c4b0cfe1156e53d1d49b2d74a9e90729bf5d6fd7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 14 22:04:42 2024 -0700
+
+ Remove legacy defaultrender settings from examples.
+
+commit 15d31f395333b0bc6fe78b671843a936473a6b9f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 14 22:01:48 2024 -0700
+
+ Update to use magick convert and magick animate.
+
+commit a5f800a1f5e183cf36e398e5d934ec4ceb758edf
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Aug 14 21:58:18 2024 -0700
+
+ Update introductory talk.
+
+commit a058c4b32712c63169cabbe8ea4a9b2e4b887203
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Aug 13 00:45:39 2024 -0700
+
+ Improve camera centering when keepAspect=true.
+
+commit 46c6537c637a7fcde78d7fd4f5f0ad1f49012642
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 21:59:57 2024 -0700
+
+ Simplify projection centering code.
+
+commit af6bcf2dc75c11c90822de683e73821d458e6167
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 20:10:54 2024 -0700
+
+ Update camera specification in examples.
+
+commit 6dc3a2fff039c90742c5656d463fa3b1465e667b
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 17:37:55 2024 -0700
+
+ Update grid3 module.
+
+commit 54b06839c165a8cdbe5179008decf424a385f1ce
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 15:53:45 2024 -0700
+
+ Document render argument of surface drawing routines.
+
+commit 6a1c5d7c138f8908ef96d52c30f354132ddfa813
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 15:53:22 2024 -0700
+
+ Add missing projection.
+
+commit e572be209f94aaaf7ecba5d1e5128d89bf759080
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 14:59:16 2024 -0700
+
+ Use final projection.
+
+commit 6dd9e271c37e1dc0f5b2d941e0a3c5d556099e98
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 14:57:59 2024 -0700
+
+ Require explicit projection in internal routine autoscale3.
+
+commit 6cba1f1da5facb823b86724cb35e9e01314fdd54
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 14:28:24 2024 -0700
+
+ Only recenter camera on nontrivial scenes.
+
+commit b730244a19a1b686138491a0c3c4fd9ea3e7ce00
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 13:43:30 2024 -0700
+
+ Update URL.
+
+commit 0e5bd5ed9c35c6871b68a08b4909a5d66c1b40f1
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 09:42:40 2024 -0700
+
+ Use general projections in graph3.asy.
+
+commit 97af20d196b35e7627ae0e8b1f14462b551a7b61
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Aug 12 04:13:42 2024 -0700
+
+ Fix last revision.
+
+commit 560ffb6e408ad5301f26e318594274e7aa08ed3f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Aug 11 23:34:20 2024 -0700
+
+ Make -debug report traceback only on error.
+
+commit 2307614f006498aeb73c2db22fbf3ecced03869f
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Aug 11 18:33:03 2024 -0700
+
+ Add srand example to documentation.
+
+commit a39b6e33590e8e0e8afa2192a905d0389d1ca1e6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Aug 11 15:33:25 2024 -0700
+
+ Fix reported camera up vector.
+
+commit 4f02db56c1e6330db61345e6b12298e882b4e553
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Aug 11 14:31:56 2024 -0700
+
+ Automatically center camera and target within scene by default;
+ change default value of center for orthographics projections to true.
+
+commit 9b49913a7b294c322b57b453ad0e5753c18a1cb7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Aug 9 12:28:26 2024 -0700
+
+ Add url option to figure function in slide.asy.
+
+commit 1a683cb01c6bec7948befe5bfc941a2b1d9de788
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jul 31 04:59:54 2024 -0700
+
+ Improve camera autoadjust when keepAspect=false.
+
+commit e4ef069ed7e8586c3d6eedd4989eeb91b3ac44bd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jul 25 12:18:34 2024 -0700
+
+ Improve internal documentation links.
+
+commit a8b99a80e307976e30cdeb88543262f82b0559ed
+Author: John Bowman <bowman@ualberta.ca>
+Date: Thu Jul 25 11:52:41 2024 -0700
+
+ Update module map and example to use templated imports (issue #470).
+
+commit e51f6aa11fb03151217790643048f3fb3012a6cb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jul 23 23:24:30 2024 -0700
+
+ Compute normals for tessellated surfaces after transformation.
+ Don't tessellate when settings.render=0.
+
+commit abcc187e719a34a490fe67b5bb0391b577821479
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jul 23 23:23:22 2024 -0700
+
+ Fix settings.render=0.
+
+commit 853e24d9bc8e287c273f02438fe809bc2fdd09d0
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 22 13:45:42 2024 -0700
+
+ Enable GLSL error reporting again.
+
+commit 0a28468d010da5159b1d3cdb921e50b469f629e9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jul 21 20:32:17 2024 -0700
+
+ Output triangle group for indexed surfaces given render option tessellate=true.
+ Fix triangle group normals.
+
+commit 1f8626d9996fa61ae3be3b1d9469bcb09d15b2f8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jul 21 18:42:08 2024 -0700
+
+ Update comment.
+
+commit cefa9d615389e34183f0830527ede4318c1cb5d8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jul 21 18:41:41 2024 -0700
+
+ Simplify code.
+
+commit a2206f5bab482a023144a6ce919096100b851026
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jul 19 09:46:24 2024 -0700
+
+ Use triangle group array assignments.
+
+commit 57c25038f9e1051d7f5c9ca51a59560aa67d317d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jul 19 09:40:42 2024 -0700
+
+ Update asygl.
+
+commit 9399282cf9e1a24fd1ba3f00dcfdc6a790838722
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jul 19 09:31:26 2024 -0700
+
+ WebGL: Allow triangle data array assignments.
+
+commit f80311ae7f35f98ecbfcaa4763305fdd0d95a052
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 15 23:26:12 2024 -0700
+
+ WebGL: Condense triangle groups data.
+
+commit 9523b77d98921e13fb958f78b57d57721df30922
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 15 18:40:18 2024 -0700
+
+ Fix issue #467 (arising from backward incompatibility #450): Missing labels in flattened 3D scene (using settings.render=0) after update to version 2.90.
+
+commit a65d33455949562694765a5384918da1741f89b4
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 15 17:40:44 2024 -0700
+
+ Update asygl.
+
+commit 42b211180d7df8ca08a7d331373a650a74917f5d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 15 17:37:18 2024 -0700
+
+ Fix color normalization.
+
+commit 7a9f9ad90a87a26d2814607e96a53ee5a23c13b2
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 15 17:34:09 2024 -0700
+
+ Revert "Fix offscreen triangle groups."
+
+ This reverts commit 5841f00d6613e9a32aef986520172738e7bb25a8.
+
+commit 40f83910cdf2961adaace41a30450ea5b71c7ad9
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jul 14 10:50:38 2024 -0700
+
+ Update asygl.
+
+commit 9eb6b146226d1d3a3aee39918b528017acfb8793
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jul 14 10:49:28 2024 -0700
+
+ Fix flatness calculation.
+
+commit 5841f00d6613e9a32aef986520172738e7bb25a8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sun Jul 14 08:54:21 2024 -0700
+
+ Fix offscreen triangle groups.
+
+commit 472d8ceb641a7f6fd6e2246b064b81185485195c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jul 6 22:05:06 2024 -0700
+
+ Fix triangle constructor.
+
+commit 9b25d1d94322fe382087823363dd7833cbdb40ce
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jul 2 10:46:36 2024 -0700
+
+ Fix teapot regularization.
+
+commit 2da7afc8b7a5b0406c3b6cd507ce7b21489509c8
+Author: John Bowman <bowman@ualberta.ca>
+Date: Mon Jul 1 21:41:32 2024 -0700
+
+ Make -d option output call traceback (issue #451).
+
+commit 5dc7992891de07af146317ad053ee56d9ffd938d
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 29 21:13:23 2024 -0700
+
+ Update asygl.
+
+commit 4d50ea9cf4c76e7489b5d6c49f84f0267aa28ecb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 29 21:12:37 2024 -0700
+
+ AsyGL: Fix stack overflow.
+
+commit c7e3109ecc4f6f4b193dca1fb80f8cb3c006c9f6
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 29 20:58:00 2024 -0700
+
+ Revert "Update asygl."
+
+ This reverts commit 8ef173f593d960e79ca79f916acea149e648c6ce.
+
+commit 8ef173f593d960e79ca79f916acea149e648c6ce
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 29 20:21:56 2024 -0700
+
+ Update asygl.
+
+commit 60d6605333f928420dccdac765925685d81bedab
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 29 20:19:54 2024 -0700
+
+ AsyGL: Travel home on initialization.
+
+commit da4cf28d54a98253de71615fc4f2dec07aaa8707
+Author: John Bowman <bowman@ualberta.ca>
+Date: Sat Jun 29 00:00:53 2024 -0700
+
+ Update asygl.
+
+commit fb9be22ade7e0ea59d9e4d6ef4485ece2777d95c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jun 28 23:53:18 2024 -0700
+
+ AsyGL: Initialize all vertices in triangle arrays, even if they are offscreen.
+
+commit 9b3c6cafd09457e3e575b770df36003c3ccbbc60
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jun 28 22:52:00 2024 -0700
+
+ Fix typo.
+
+commit efc15f4d3cf0f2891ac944d9d0fa3f57a8966fdb
+Author: John Bowman <bowman@ualberta.ca>
+Date: Wed Jun 26 14:58:12 2024 -0700
+
+ Fix slide margin and landscape mode.
+
+commit 7d206b8a70e8c985a67cfe5dddcc455163bde2b7
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 25 17:56:40 2024 -0700
+
+ XASY: Fix SyntaxWarning (issue #464).
+
+commit 6e02744a6b93d376e3abe41561d7b0039a8c8d80
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 25 17:50:36 2024 -0700
+
+ Replace each tab in error messages by 1 space (issue #444).
+
+commit b016b84079c777364eaa40c20ce5a3d80805980c
+Author: John Bowman <bowman@ualberta.ca>
+Date: Tue Jun 25 09:29:42 2024 -0700
+
+ Fix number of colors for prerendering bezier triangles.
+
+commit c1eb726af8eb4afc6c4872fedef0d05b0cd650bd
+Author: John Bowman <bowman@ualberta.ca>
+Date: Fri Jun 21 13:56:37 2024 -0700
+
+ Increment version to 2.91.
+
commit 58246991e2474ffbd1bfe012d5d0a11407da7795
Author: John Bowman <bowman@ualberta.ca>
Date: Fri Jun 21 10:33:58 2024 -0700
diff --git a/graphics/asymptote/GUI/icons_rc.py b/graphics/asymptote/GUI/icons_rc.py
index 8fca5b33ee..02c1c94daa 100644
--- a/graphics/asymptote/GUI/icons_rc.py
+++ b/graphics/asymptote/GUI/icons_rc.py
@@ -2797,93 +2797,93 @@ qt_resource_struct_v2 = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x07\x6f\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x0f\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x01\x91\x54\x90\x93\x6f\
\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x85\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x12\xa4\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x00\xee\x00\x01\x00\x00\x00\x01\x00\x00\x16\x90\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb3\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xe1\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xfc\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa3\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x1a\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xba\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7f\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4d\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x0c\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x43\x00\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x4c\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe8\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x02\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x04\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf8\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x93\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x03\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xe4\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x25\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x10\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x01\x91\x54\x90\x93\x6f\
\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x86\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xe4\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x47\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x4e\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x94\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x0f\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x67\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x45\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x6b\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x1a\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x3a\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x1a\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x5d\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6d\
+\x00\x00\x01\x91\x54\x90\x93\x6f\
\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xca\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x71\
\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x85\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xf5\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6f\
+\x00\x00\x01\x91\x54\x90\x93\x72\
\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xe7\
-\x00\x00\x01\x90\x3b\xe6\x5e\x6e\
+\x00\x00\x01\x91\x54\x90\x93\x70\
"
qt_version = [int(v) for v in QtCore.qVersion().split('.')]
diff --git a/graphics/asymptote/GUI/xasy2asy.py b/graphics/asymptote/GUI/xasy2asy.py
index 25c75b2ecf..cf1edb8af0 100644
--- a/graphics/asymptote/GUI/xasy2asy.py
+++ b/graphics/asymptote/GUI/xasy2asy.py
@@ -1536,8 +1536,8 @@ class xasyScript(xasyItem):
def getObjectCode(self, asy2psmap=identity()):
numeric=r'([-+]?(?:(?:\d*\.\d+)|(?:\d+\.?)))'
- rSize=re.compile("size\(\("+numeric+","+numeric+","+numeric+","
- +numeric+","+numeric+","+numeric+"\)\); "+
+ rSize=re.compile(r"size\(\("+numeric+","+numeric+","+numeric+","
+ +numeric+","+numeric+","+numeric+r"\)\); "+
self.resizeComment)
newScript = self.getReplacedKeysCode(self.findNonIdKeys())
diff --git a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
index 10947361b6..31617758a6 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -2,8 +2,8 @@
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Relative path conversion top directories.
-set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.90/LspCpp")
-set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.90/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.91/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.91/LspCpp")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
diff --git a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
index cd14a44b53..e420dda128 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/CMakeFiles/doc.dir/build.make
@@ -56,10 +56,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.91/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.91/LspCpp
# Utility rule file for doc.
@@ -70,8 +70,8 @@ include third_party/uri/CMakeFiles/doc.dir/compiler_depend.make
include third_party/uri/CMakeFiles/doc.dir/progress.make
third_party/uri/CMakeFiles/doc:
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating API documentation with Doxygen"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri && /bin/doxygen /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/Doxyfile
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating API documentation with Doxygen"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri && /bin/doxygen /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/Doxyfile
doc: third_party/uri/CMakeFiles/doc
doc: third_party/uri/CMakeFiles/doc.dir/build.make
@@ -82,10 +82,10 @@ third_party/uri/CMakeFiles/doc.dir/build: doc
.PHONY : third_party/uri/CMakeFiles/doc.dir/build
third_party/uri/CMakeFiles/doc.dir/clean:
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri && $(CMAKE_COMMAND) -P CMakeFiles/doc.dir/cmake_clean.cmake
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri && $(CMAKE_COMMAND) -P CMakeFiles/doc.dir/cmake_clean.cmake
.PHONY : third_party/uri/CMakeFiles/doc.dir/clean
third_party/uri/CMakeFiles/doc.dir/depend:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake "--color=$(COLOR)"
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.91/LspCpp /usr/local/src/asymptote-2.91/LspCpp/third_party/uri /usr/local/src/asymptote-2.91/LspCpp /usr/local/src/asymptote-2.91/LspCpp/third_party/uri /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/CMakeFiles/doc.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : third_party/uri/CMakeFiles/doc.dir/depend
diff --git a/graphics/asymptote/LspCpp/third_party/uri/Doxyfile b/graphics/asymptote/LspCpp/third_party/uri/Doxyfile
index d5d97f4b56..2608cda2a4 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/Doxyfile
+++ b/graphics/asymptote/LspCpp/third_party/uri/Doxyfile
@@ -128,7 +128,7 @@ FULL_PATH_NAMES = YES
# If left blank the directory from which doxygen is run is used as the
# path to strip.
-STRIP_FROM_PATH = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/
+STRIP_FROM_PATH = /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
# the path mentioned in the documentation of a class, which tells
@@ -626,7 +626,7 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include
+INPUT = /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -658,7 +658,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail
+EXCLUDE = /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
@@ -821,7 +821,7 @@ COLS_IN_ALPHA_INDEX = 5
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
# should be ignored while generating the index headers.
-IGNORE_PREFIX = /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/uri/src/
+IGNORE_PREFIX = /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/uri/src/
#---------------------------------------------------------------------------
# configuration options related to the HTML output
diff --git a/graphics/asymptote/LspCpp/third_party/uri/Makefile b/graphics/asymptote/LspCpp/third_party/uri/Makefile
index 508a0f8b29..f677d76ec2 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/Makefile
+++ b/graphics/asymptote/LspCpp/third_party/uri/Makefile
@@ -60,10 +60,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.91/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.91/LspCpp
#=============================================================================
# Targets provided globally by CMake.
@@ -135,14 +135,14 @@ install/strip/fast: preinstall/fast
# The main all target
all: cmake_check_build_system
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles /usr/local/src/asymptote-2.90/LspCpp/third_party/uri//CMakeFiles/progress.marks
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/all
- $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles 0
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.91/LspCpp/CMakeFiles /usr/local/src/asymptote-2.91/LspCpp/third_party/uri//CMakeFiles/progress.marks
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.91/LspCpp/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/clean
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/clean
.PHONY : clean
# The main clean target
@@ -151,22 +151,22 @@ clean/fast: clean
# Prepare targets for installation.
preinstall: all
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
third_party/uri/CMakeFiles/doc.dir/rule:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/CMakeFiles/doc.dir/rule
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/CMakeFiles/doc.dir/rule
.PHONY : third_party/uri/CMakeFiles/doc.dir/rule
# Convenience name for target.
@@ -175,7 +175,7 @@ doc: third_party/uri/CMakeFiles/doc.dir/rule
# fast build rule for target.
doc/fast:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/CMakeFiles/doc.dir/build.make third_party/uri/CMakeFiles/doc.dir/build
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/CMakeFiles/doc.dir/build.make third_party/uri/CMakeFiles/doc.dir/build
.PHONY : doc/fast
# Help Target
@@ -202,6 +202,6 @@ help:
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system
diff --git a/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake b/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
index b0d4be5b79..654cd14710 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/cmake_install.cmake
@@ -1,4 +1,4 @@
-# Install script for directory: /usr/local/src/asymptote-2.90/LspCpp/third_party/uri
+# Install script for directory: /usr/local/src/asymptote-2.91/LspCpp/third_party/uri
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
@@ -43,12 +43,12 @@ if(NOT DEFINED CMAKE_OBJDUMP)
endif()
if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
- file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/." TYPE DIRECTORY FILES "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include")
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/." TYPE DIRECTORY FILES "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include")
endif()
if(NOT CMAKE_INSTALL_LOCAL_ONLY)
# Include the install script for each subdirectory.
- include("/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/cmake_install.cmake")
+ include("/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/cmake_install.cmake")
endif()
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
index 10947361b6..31617758a6 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/CMakeDirectoryInformation.cmake
@@ -2,8 +2,8 @@
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
# Relative path conversion top directories.
-set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.90/LspCpp")
-set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.90/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/usr/local/src/asymptote-2.91/LspCpp")
+set(CMAKE_RELATIVE_PATH_TOP_BINARY "/usr/local/src/asymptote-2.91/LspCpp")
# Force unix paths in dependencies.
set(CMAKE_FORCE_UNIX_PATHS 1)
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
index 594e10e458..2866cce2ca 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake
@@ -8,14 +8,14 @@ set(CMAKE_DEPENDS_LANGUAGES
# The set of dependency files which are needed:
set(CMAKE_DEPENDS_DEPENDENCY_FILES
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o.d"
- "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_builder.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o.d"
+ "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_errors.cpp" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o" "gcc" "third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o.d"
)
# Targets to which this target links which contain Fortran sources.
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
index feab93c641..1cee06521e 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/build.make
@@ -56,10 +56,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.91/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.91/LspCpp
# Include any dependencies generated for this target.
include third_party/uri/src/CMakeFiles/network-uri.dir/depend.make
@@ -75,114 +75,114 @@ include third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/uri.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o -MF CMakeFiles/network-uri.dir/uri.cpp.o.d -o CMakeFiles/network-uri.dir/uri.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o -MF CMakeFiles/network-uri.dir/uri.cpp.o.d -o CMakeFiles/network-uri.dir/uri.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/uri.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp > CMakeFiles/network-uri.dir/uri.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri.cpp > CMakeFiles/network-uri.dir/uri.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/uri.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp -o CMakeFiles/network-uri.dir/uri.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri.cpp -o CMakeFiles/network-uri.dir/uri.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/uri/src/uri_builder.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o -MF CMakeFiles/network-uri.dir/uri_builder.cpp.o.d -o CMakeFiles/network-uri.dir/uri_builder.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o -MF CMakeFiles/network-uri.dir/uri_builder.cpp.o.d -o CMakeFiles/network-uri.dir/uri_builder.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_builder.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/uri_builder.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp > CMakeFiles/network-uri.dir/uri_builder.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_builder.cpp > CMakeFiles/network-uri.dir/uri_builder.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/uri_builder.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp -o CMakeFiles/network-uri.dir/uri_builder.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_builder.cpp -o CMakeFiles/network-uri.dir/uri_builder.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri/src/uri_errors.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o -MF CMakeFiles/network-uri.dir/uri_errors.cpp.o.d -o CMakeFiles/network-uri.dir/uri_errors.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o -MF CMakeFiles/network-uri.dir/uri_errors.cpp.o.d -o CMakeFiles/network-uri.dir/uri_errors.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_errors.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/uri_errors.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp > CMakeFiles/network-uri.dir/uri_errors.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_errors.cpp > CMakeFiles/network-uri.dir/uri_errors.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/uri_errors.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp -o CMakeFiles/network-uri.dir/uri_errors.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_errors.cpp -o CMakeFiles/network-uri.dir/uri_errors.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_party/uri/src/detail/uri_parse.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp > CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.cpp > CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o: third_party/uri/src/detail/uri_parse_authority.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp > CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp > CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp -o CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/detail/uri_advance_parts.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp > CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp > CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp -o CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third_party/uri/src/detail/uri_normalize.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp > CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.cpp > CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.cpp -o CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_party/uri/src/detail/uri_resolve.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o: third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.ts
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -c /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -MF CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o.d -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o -c /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp > CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.cpp > CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && /bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.cpp -o CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
# Object files for target network-uri
network__uri_OBJECTS = \
@@ -208,19 +208,19 @@ third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri
third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri.dir/build.make
third_party/uri/src/libnetwork-uri.a: third_party/uri/src/CMakeFiles/network-uri.dir/link.txt
- @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/usr/local/src/asymptote-2.90/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX static library libnetwork-uri.a"
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean_target.cmake
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/network-uri.dir/link.txt --verbose=$(VERBOSE)
+ @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/usr/local/src/asymptote-2.91/LspCpp/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX static library libnetwork-uri.a"
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean_target.cmake
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/network-uri.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
third_party/uri/src/CMakeFiles/network-uri.dir/build: third_party/uri/src/libnetwork-uri.a
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/build
third_party/uri/src/CMakeFiles/network-uri.dir/clean:
- cd /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean.cmake
+ cd /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src && $(CMAKE_COMMAND) -P CMakeFiles/network-uri.dir/cmake_clean.cmake
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/clean
third_party/uri/src/CMakeFiles/network-uri.dir/depend:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.90/LspCpp /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake "--color=$(COLOR)"
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /usr/local/src/asymptote-2.91/LspCpp /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.91/LspCpp /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/DependInfo.cmake "--color=$(COLOR)"
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/depend
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
index 3100d7c219..9a2be24587 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/compiler_depend.internal
@@ -2,7 +2,7 @@
# Generated by "Unix Makefiles" Generator, CMake Version 3.28
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -201,13 +201,13 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -431,23 +431,23 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm_split.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/algorithm.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/algorithm_split.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -665,14 +665,14 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/grammar.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/grammar.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -890,14 +890,14 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/grammar.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/grammar.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1102,21 +1102,21 @@ third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm_find.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/algorithm_find.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1340,25 +1340,25 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/algorithm.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_advance_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_percent_encode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_resolve.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_builder.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_builder.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1578,22 +1578,22 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdint.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/optional.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/string_view.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/algorithm.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/optional.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/string_view.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/decode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/encode.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/translate.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/detail/uri_parts.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_builder.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/algorithm.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_normalize.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/detail/uri_parse_authority.hpp
third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/uri_errors.cpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/uri_errors.cpp
/usr/include/alloca.h
/usr/include/asm-generic/errno-base.h
/usr/include/asm-generic/errno.h
@@ -1734,6 +1734,6 @@ third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
/usr/include/wchar.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stdarg.h
/usr/lib/gcc/x86_64-redhat-linux/14/include/stddef.h
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/config.hpp
- /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/config.hpp
+ /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include/network/uri/uri_errors.hpp
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
index abe8aebb87..ab5f0b23d4 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/CMakeFiles/network-uri.dir/flags.make
@@ -4,7 +4,7 @@
# compile CXX with /bin/c++
CXX_DEFINES =
-CXX_INCLUDES = -I/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src -I/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/include
+CXX_INCLUDES = -I/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src -I/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/include
CXX_FLAGS = -fPIE -D_FILE_OFFSET_BIS=64 -DUSEGC -DLSPCPP_USEGC -I../gc-8.2.4/include -std=c++11 -Wall -Werror -Wno-parentheses -O2 -g -DNDEBUG
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/Makefile b/graphics/asymptote/LspCpp/third_party/uri/src/Makefile
index 7948b3894d..80d2789f63 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/Makefile
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/Makefile
@@ -60,10 +60,10 @@ RM = /usr/bin/cmake -E rm -f
EQUALS = =
# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_SOURCE_DIR = /usr/local/src/asymptote-2.91/LspCpp
# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.90/LspCpp
+CMAKE_BINARY_DIR = /usr/local/src/asymptote-2.91/LspCpp
#=============================================================================
# Targets provided globally by CMake.
@@ -135,14 +135,14 @@ install/strip/fast: preinstall/fast
# The main all target
all: cmake_check_build_system
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src//CMakeFiles/progress.marks
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/all
- $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.90/LspCpp/CMakeFiles 0
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.91/LspCpp/CMakeFiles /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src//CMakeFiles/progress.marks
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/all
+ $(CMAKE_COMMAND) -E cmake_progress_start /usr/local/src/asymptote-2.91/LspCpp/CMakeFiles 0
.PHONY : all
# The main clean target
clean:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/clean
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/clean
.PHONY : clean
# The main clean target
@@ -151,22 +151,22 @@ clean/fast: clean
# Prepare targets for installation.
preinstall: all
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
.PHONY : preinstall
# Prepare targets for installation.
preinstall/fast:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/preinstall
.PHONY : preinstall/fast
# clear depends
depend:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
.PHONY : depend
# Convenience name for target.
third_party/uri/src/CMakeFiles/network-uri.dir/rule:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/CMakeFiles/network-uri.dir/rule
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 third_party/uri/src/CMakeFiles/network-uri.dir/rule
.PHONY : third_party/uri/src/CMakeFiles/network-uri.dir/rule
# Convenience name for target.
@@ -175,7 +175,7 @@ network-uri: third_party/uri/src/CMakeFiles/network-uri.dir/rule
# fast build rule for target.
network-uri/fast:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/build
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/build
.PHONY : network-uri/fast
detail/uri_advance_parts.o: detail/uri_advance_parts.cpp.o
@@ -183,7 +183,7 @@ detail/uri_advance_parts.o: detail/uri_advance_parts.cpp.o
# target to build an object file
detail/uri_advance_parts.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.o
.PHONY : detail/uri_advance_parts.cpp.o
detail/uri_advance_parts.i: detail/uri_advance_parts.cpp.i
@@ -191,7 +191,7 @@ detail/uri_advance_parts.i: detail/uri_advance_parts.cpp.i
# target to preprocess a source file
detail/uri_advance_parts.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.i
.PHONY : detail/uri_advance_parts.cpp.i
detail/uri_advance_parts.s: detail/uri_advance_parts.cpp.s
@@ -199,7 +199,7 @@ detail/uri_advance_parts.s: detail/uri_advance_parts.cpp.s
# target to generate assembly for a file
detail/uri_advance_parts.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_advance_parts.cpp.s
.PHONY : detail/uri_advance_parts.cpp.s
detail/uri_normalize.o: detail/uri_normalize.cpp.o
@@ -207,7 +207,7 @@ detail/uri_normalize.o: detail/uri_normalize.cpp.o
# target to build an object file
detail/uri_normalize.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.o
.PHONY : detail/uri_normalize.cpp.o
detail/uri_normalize.i: detail/uri_normalize.cpp.i
@@ -215,7 +215,7 @@ detail/uri_normalize.i: detail/uri_normalize.cpp.i
# target to preprocess a source file
detail/uri_normalize.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.i
.PHONY : detail/uri_normalize.cpp.i
detail/uri_normalize.s: detail/uri_normalize.cpp.s
@@ -223,7 +223,7 @@ detail/uri_normalize.s: detail/uri_normalize.cpp.s
# target to generate assembly for a file
detail/uri_normalize.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_normalize.cpp.s
.PHONY : detail/uri_normalize.cpp.s
detail/uri_parse.o: detail/uri_parse.cpp.o
@@ -231,7 +231,7 @@ detail/uri_parse.o: detail/uri_parse.cpp.o
# target to build an object file
detail/uri_parse.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.o
.PHONY : detail/uri_parse.cpp.o
detail/uri_parse.i: detail/uri_parse.cpp.i
@@ -239,7 +239,7 @@ detail/uri_parse.i: detail/uri_parse.cpp.i
# target to preprocess a source file
detail/uri_parse.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.i
.PHONY : detail/uri_parse.cpp.i
detail/uri_parse.s: detail/uri_parse.cpp.s
@@ -247,7 +247,7 @@ detail/uri_parse.s: detail/uri_parse.cpp.s
# target to generate assembly for a file
detail/uri_parse.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse.cpp.s
.PHONY : detail/uri_parse.cpp.s
detail/uri_parse_authority.o: detail/uri_parse_authority.cpp.o
@@ -255,7 +255,7 @@ detail/uri_parse_authority.o: detail/uri_parse_authority.cpp.o
# target to build an object file
detail/uri_parse_authority.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.o
.PHONY : detail/uri_parse_authority.cpp.o
detail/uri_parse_authority.i: detail/uri_parse_authority.cpp.i
@@ -263,7 +263,7 @@ detail/uri_parse_authority.i: detail/uri_parse_authority.cpp.i
# target to preprocess a source file
detail/uri_parse_authority.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.i
.PHONY : detail/uri_parse_authority.cpp.i
detail/uri_parse_authority.s: detail/uri_parse_authority.cpp.s
@@ -271,7 +271,7 @@ detail/uri_parse_authority.s: detail/uri_parse_authority.cpp.s
# target to generate assembly for a file
detail/uri_parse_authority.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_parse_authority.cpp.s
.PHONY : detail/uri_parse_authority.cpp.s
detail/uri_resolve.o: detail/uri_resolve.cpp.o
@@ -279,7 +279,7 @@ detail/uri_resolve.o: detail/uri_resolve.cpp.o
# target to build an object file
detail/uri_resolve.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.o
.PHONY : detail/uri_resolve.cpp.o
detail/uri_resolve.i: detail/uri_resolve.cpp.i
@@ -287,7 +287,7 @@ detail/uri_resolve.i: detail/uri_resolve.cpp.i
# target to preprocess a source file
detail/uri_resolve.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.i
.PHONY : detail/uri_resolve.cpp.i
detail/uri_resolve.s: detail/uri_resolve.cpp.s
@@ -295,7 +295,7 @@ detail/uri_resolve.s: detail/uri_resolve.cpp.s
# target to generate assembly for a file
detail/uri_resolve.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/detail/uri_resolve.cpp.s
.PHONY : detail/uri_resolve.cpp.s
uri.o: uri.cpp.o
@@ -303,7 +303,7 @@ uri.o: uri.cpp.o
# target to build an object file
uri.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.o
.PHONY : uri.cpp.o
uri.i: uri.cpp.i
@@ -311,7 +311,7 @@ uri.i: uri.cpp.i
# target to preprocess a source file
uri.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.i
.PHONY : uri.cpp.i
uri.s: uri.cpp.s
@@ -319,7 +319,7 @@ uri.s: uri.cpp.s
# target to generate assembly for a file
uri.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri.cpp.s
.PHONY : uri.cpp.s
uri_builder.o: uri_builder.cpp.o
@@ -327,7 +327,7 @@ uri_builder.o: uri_builder.cpp.o
# target to build an object file
uri_builder.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.o
.PHONY : uri_builder.cpp.o
uri_builder.i: uri_builder.cpp.i
@@ -335,7 +335,7 @@ uri_builder.i: uri_builder.cpp.i
# target to preprocess a source file
uri_builder.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.i
.PHONY : uri_builder.cpp.i
uri_builder.s: uri_builder.cpp.s
@@ -343,7 +343,7 @@ uri_builder.s: uri_builder.cpp.s
# target to generate assembly for a file
uri_builder.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_builder.cpp.s
.PHONY : uri_builder.cpp.s
uri_errors.o: uri_errors.cpp.o
@@ -351,7 +351,7 @@ uri_errors.o: uri_errors.cpp.o
# target to build an object file
uri_errors.cpp.o:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.o
.PHONY : uri_errors.cpp.o
uri_errors.i: uri_errors.cpp.i
@@ -359,7 +359,7 @@ uri_errors.i: uri_errors.cpp.i
# target to preprocess a source file
uri_errors.cpp.i:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.i
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.i
.PHONY : uri_errors.cpp.i
uri_errors.s: uri_errors.cpp.s
@@ -367,7 +367,7 @@ uri_errors.s: uri_errors.cpp.s
# target to generate assembly for a file
uri_errors.cpp.s:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.s
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(MAKE) $(MAKESILENT) -f third_party/uri/src/CMakeFiles/network-uri.dir/build.make third_party/uri/src/CMakeFiles/network-uri.dir/uri_errors.cpp.s
.PHONY : uri_errors.cpp.s
# Help Target
@@ -418,6 +418,6 @@ help:
# No rule that depends on this can have commands that come from listfiles
# because they might be regenerated.
cmake_check_build_system:
- cd /usr/local/src/asymptote-2.90/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+ cd /usr/local/src/asymptote-2.91/LspCpp && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
.PHONY : cmake_check_build_system
diff --git a/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake b/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
index fbf9b52637..79a8f6cd03 100644
--- a/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
+++ b/graphics/asymptote/LspCpp/third_party/uri/src/cmake_install.cmake
@@ -1,4 +1,4 @@
-# Install script for directory: /usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src
+# Install script for directory: /usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src
# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
@@ -43,6 +43,6 @@ if(NOT DEFINED CMAKE_OBJDUMP)
endif()
if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT)
- file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/usr/local/src/asymptote-2.90/LspCpp/third_party/uri/src/libnetwork-uri.a")
+ file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/usr/local/src/asymptote-2.91/LspCpp/third_party/uri/src/libnetwork-uri.a")
endif()
diff --git a/graphics/asymptote/ReleaseNotes b/graphics/asymptote/ReleaseNotes
index 3afa9be03a..c4e536bd78 100644
--- a/graphics/asymptote/ReleaseNotes
+++ b/graphics/asymptote/ReleaseNotes
@@ -1,4 +1,22 @@
+Release Notes for Version 2.91
+
+By default, orthographic projections now use center=true;
+the camera and target are automatically centered within the scene.
+The surface constructor for triangles was fixed.
+A bug in the WebGL flatness test was fixed.
+Triangle group bugs were fixed and now produce compact HTML output.
+Triangle groups are used for indexed surfaces drawn with the render option
+tessellate=true.
+GLSL error reporting was restored.
+The reported camera up vector was fixed.
+The map module was fixed.
+A syntax warning in Xasy was fixed.
+Improvements were made to the slide module.
+A bug was fixed in the experimental settings.render=0 mode.
+The debug option now outputs a traceback.
+
Release Notes for Version 2.90
+
A bug in the approximate transparency rendering code for GPUs
without SSBO support was fixed.
Support was added for templated accesses involving imported types,
@@ -6,7 +24,7 @@ top-level structure types, and static fields.
ImageMagick magick convert is now used instead of convert.
The add(picture dest, picture src, pair position) function now respects
size specifications (backwards incompatible; the previous behaviour can
-be obtained with add(dest,src.fit(identity()),position).
+be obtained with add(dest,src.fit(identity),position).
The terminal is now reset upon exit. The erase command was fixed.
Picture scalings in different dimensions are decoupled again.
Flycheck syntax checking support for Emacs was added.
diff --git a/graphics/asymptote/asy-keywords.el b/graphics/asymptote/asy-keywords.el
index 071b63017f..27ff1a41dc 100644
--- a/graphics/asymptote/asy-keywords.el
+++ b/graphics/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 "2.90")
+(defvar asy-keywords-version "2.91")
(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 Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution scaleT schur 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 Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 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 DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear 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 RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape 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 _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees 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 ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit 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 bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube 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 containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple 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 drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill fillbox filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm 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 make3dgrid makeNode makecircle makedraw makepen maketriangle map mapArray mapArrayString margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix 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 texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim 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 xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 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 DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear 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 RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape 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 _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees 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 ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit 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 bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centered centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube 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 containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple 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 drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill fillbox filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm 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 make3dgrid makeNode makecircle makedraw makepen maketriangle map mapArray mapArrayString margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix 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 texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim 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 xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero 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 Infinity 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 MarkFillable MarkPath 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 NULL_VERTEX 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 RELEASE 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 XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle 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 deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements 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 nan newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive optimizeTableau 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 plain_bounds plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings signedtrailingzero solid spinner springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize vline white wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
diff --git a/graphics/asymptote/asy.list b/graphics/asymptote/asy.list
index 096577c741..a94d20536a 100644
--- a/graphics/asymptote/asy.list
+++ b/graphics/asymptote/asy.list
@@ -201,6 +201,7 @@ void assert(bool b, string s=<default>);
pen Palatino(string series=<default>, string shape=<default>);
real incircle(pair a, pair b, pair c, pair d);
frame Landscape(frame f);
+projection centered(projection P, picture pic=<default>);
pen purple;
string italic(string s);
real atan(real x);
@@ -294,7 +295,7 @@ string getc(file f);
bool debugging;
void shipout(string prefix=<default>, picture pic=<default>, frame orientation(frame)=<default>, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>);
void shipout(string prefix=<default>, frame f, string format=<default>, bool wait=<default>, bool view=<default>, string options=<default>, string script=<default>, light light=<default>, projection P=<default>, transform t=<default>);
-void shipout3(string prefix, frame f, string format=<default>, real width, real height, real angle, real zoom, triple m, triple m, pair shift, pair margin, real[][] t, real[] background, triple[] lights, real[][] diffuse, real[][] specular, bool view=<default>);
+void shipout3(string prefix, frame f, string format=<default>, real width, real height, real angle, real zoom, triple m, triple m, pair shift, pair margin, real[][] t, real[][] tup, real[] background, triple[] lights, real[][] diffuse, real[][] specular, bool view=<default>);
void shipout3(string prefix, frame f, string format=<default>);
string getstring(string name=<default>, string default=<default>, string prompt=<default>, bool store=<default>);
int debuggerlines;
@@ -2274,8 +2275,8 @@ circle excircle(side side);
point orthocenter(point A, point B, point C);
point orthocenter(triangle t);
line extend(line l);
-point intersectionpoint(line l1, line l2);
point[] standardizecoordsys(coordsys R=<default>, bool warn=<default> ... point[] M);
+point intersectionpoint(line l1, line l2);
pair[] intersectionpoints(pair A, pair B, real a, real b, real c, real d, real f, real g);
pair[] intersectionpoints(pair A, pair B, real[] equation);
point[] intersectionpoints(line l, path g);
@@ -2851,20 +2852,20 @@ void(flatguide3)[][] lift(real f(real x, real y), guide[][] g, void join(flatgui
void(flatguide3)[][] lift(real f(pair z), guide[][] g, void join(flatguide3)(... void(flatguide3)[])=<default>);
triple polar(real r, real theta, real phi);
void polargraph(flatguide3)(real r(real, real), real theta(real), real phi(real), int n=<default>, void join(flatguide3)(... void(flatguide3)[])=<default>);
-void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>);
-void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
-void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>);
+void xaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>, projection P=<default>);
+void yaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>, projection P=<default>);
+void zaxis3At(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, bool opposite=<default>, bool opposite2=<default>, bool primary=<default>, projection P=<default>);
+void xaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, projection P=<default>);
+void yaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, projection P=<default>);
+void zaxis3(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real zmin=<default>, real zmax=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, bool above=<default>, projection P=<default>);
bool uperiodic(real[][] a);
bool uperiodic(triple[][] a);
bool vperiodic(real[][] a);
bool vperiodic(triple[][] a);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void OutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P);
+void axis(picture pic=<default>, Label L=<default>, path3 g, path3 g2=<default>, pen p=<default>, void ticks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P), ticklocate locate, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, int[] divisor=<default>, bool above=<default>, bool opposite=<default>);
void Bounds(picture, axisT)(int type=<default>, int type2=<default>, triple align=<default>, bool extend=<default>);
void Bounds(picture, axisT);
void XZZero(picture, axisT)(triple align=<default>, bool extend=<default>);
@@ -2884,8 +2885,8 @@ void XYEquals(picture, axisT)(real x, real y, triple align=<default>, bool exten
triple Dir(real)(triple dir);
void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen[] p, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
void draw(picture pic=<default>, Label[] L=<default>, void(flatguide3)[][] g, pen p=<default>, light light=<default>, string name=<default>, render render=<default>, interaction interaction=<default>);
-void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks=<default>, real[] ticks=<default>, int N=<default>, bool begin=<default>, bool end=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void Ticks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(int sign, Label F=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
real maxlength(triple f(pair z), pair a, pair b, int nu, int nv);
void drawtick(picture pic, real[][] T, path3 g, path3 g2, ticklocate locate, real val, real Size, int sign, pen p, bool extend);
triple tickMin3(picture pic);
@@ -2898,14 +2899,14 @@ real ScaleZ(picture pic=<default>, real z);
real[][] ScaleZ(picture pic=<default>, real[][] P);
picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b, int nu=<default>, int nv=<default>, bool truesize=<default>, real maxlength=<default>, bool cond(pair z)=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, string name=<default>, render render=<default>);
path3 Circle(triple c, real r, triple normal=<default>, int n=<default>);
-void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P);
void Spline(flatguide3)(... void(flatguide3)[]);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
-void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
-void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, int N=<default>, int n=<default>, real Step=<default>, real step=<default>, bool begin=<default>, bool end=<default>, tickvalues modify(tickvalues)=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)(Label format=<default>, string ticklabel(real)=<default>, bool beginlabel=<default>, bool endlabel=<default>, real[] Ticks, real[] ticks=<default>, real Size=<default>, real size=<default>, bool extend=<default>, pen pTick=<default>, pen ptick=<default>);
+void InOutTicks(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P);
+void axes3(picture pic=<default>, Label xlabel=<default>, Label ylabel=<default>, Label zlabel=<default>, bool extend=<default>, triple min=<default>, triple max=<default>, pen p=<default>, bool arrow(picture, path3, material, marginT3(path3, pen), light, light)=<default>, marginT3 margin(path3, pen)=<default>, projection P=<default>);
void label(picture pic, Label L, triple v, real x, align align, string format, pen p);
void labelx(picture pic=<default>, Label L=<default>, triple v, align align=<default>, string format=<default>, pen p=<default>);
void labelx3(picture pic=<default>, Label L=<default>, real x, align align=<default>, string format=<default>, pen p=<default>);
@@ -2950,8 +2951,8 @@ real[][][] bispline(real[][] f, real[] x, real[] y, real[] xsplinetype(real[], r
real[][][] bispline0(real[][] z, real[][] p, real[][] q, real[][] r, real[] x, real[] y, bool[][] cond=<default>);
path3[] segment(triple[] v, bool[] cond, void join(flatguide3)(... void(flatguide3)[])=<default>);
real[] uniform(real T(real x), real Tinv(real x), real a, real b, int n);
-void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>)();
-void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>);
+void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P)();
+void NoTicks3(picture, real[][], Label, path3, path3, pen, bool(picture, path3, material, marginT3(path3, pen), light, light), marginT3(path3, pen), ticklocate, int[], bool opposite=<default>, bool primary=<default>, projection P);
string DefaultFormat(real);
string DefaultLogFormat(real)(int base);
string DefaultLogFormat(real);
@@ -3040,9 +3041,9 @@ tickvalues NoZero(tickvalues);
string NoZeroFormat(real);
guide Hermite(... guide[])(real[] splinetype(real[], real[]));
guide Hermite(... guide[]);
-path Circle(pair c, real r, int n=<default>);
void xaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
void yaxisAt(picture pic=<default>, Label L=<default>, void axis(picture, axisT), real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool opposite=<default>);
+path Circle(pair c, real r, int n=<default>);
void xaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real xmin=<default>, real xmax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>);
void yaxis(picture pic=<default>, Label L=<default>, void axis(picture, axisT)=<default>, real ymin=<default>, real ymax=<default>, pen p=<default>, void ticks(frame, transform, Label, pair, path, path, pen, bool(picture, path, pen, marginT(path, pen)), marginT(path, pen), ticklocate, int[], bool opposite=<default>)=<default>, bool arrow(picture, path, pen, marginT(path, pen))=<default>, marginT margin(path, pen)=<default>, bool above=<default>, bool autorotate=<default>);
bool axiscoverage(int N, transform T, path g, ticklocate locate, real Step, pair side, int sign, real Size, Label F, string ticklabel(real), real norm, real limit);
@@ -3447,12 +3448,11 @@ void simplexWrite(rational[][] E, int[] Bindices, int, int);
path roundedpath(path A, real R, real S=<default>);
problem operator init();
simplex operator init();
-void nextpage(pen p=<default>);
+void filecode(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
void display(frame[] f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void display(frame f, real margin=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void display(string[] s, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
void display(string s, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void filecode(bool center=<default>, string s, pen p=<default>, real indent=<default>, real skip=<default>, filltype filltype=<default>);
void multifigure(string[] slist, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool step=<default>);
void subitem(string s, pen p=<default>);
pen pagenumberpen;
@@ -3471,12 +3471,12 @@ void asyfilecode(bool center=<default>, string s, string options=<default>, stri
bool itemstep;
real itemskip;
void remark(bool center=<default>, string s, pair align=<default>, pen p=<default>, real indent=<default>, bool minipage=<default>, real skip=<default>, filltype filltype=<default>, bool step=<default>);
-void usersetting();
void item(string s, pen p=<default>, bool step=<default>);
+void usersetting();
bool landscape;
pen authorpen;
-real codeskip;
string cropcode(string s);
+real codeskip;
void newslide(bool stepping=<default>);
bool allowstepping;
pair currentposition;
@@ -3521,9 +3521,9 @@ void incrementposition(pair z);
pen institutionpen;
void skip(real n=<default>);
bool stepping;
+int page;
real pagemargin;
pen steppagenumberpen;
-int page;
bool empty();
void currentexitfunction();
void step();
@@ -3533,9 +3533,10 @@ void center(string s, pen p=<default>);
void equation(string s, pen p=<default>);
void equations(string s, pen p=<default>);
void asyinclude(string s, real xsize=<default>, real ysize=<default>);
-void figure(string[] s, string options=<default>, real margin=<default>, string[] captions=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
-void figure(string s, string options=<default>, string caption=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void figure(string[] s, string options=<default>, real margin=<default>, string[] captions=<default>, string caption=<default>, string[] url=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
+void figure(string s, string options=<default>, string caption=<default>, string url=<default>, pair align=<default>, pen p=<default>, pen figuremattpen=<default>, bool final=<default>);
real figureborder;
+void nextpage(pen p=<default>);
pen figuremattpen;
string bullet;
int preamblenodes;
@@ -3591,8 +3592,8 @@ patch[] triangletoquads(path3 external, real f(triple), triple grad(triple), tri
patch trianglewithnormals(path3 external, triple n1, triple n2, triple n3);
int NULL_VERTEX;
evaluatedpoint[][][] make3dgrid(triple a, triple b, int nx, int ny, int nz, real f(triple), bool allowzero=<default>);
-real B33(real t);
real B03(real t);
+real B33(real t);
evaluatedpoint[][] slice(evaluatedpoint[][] a, int start1, int end1, int start2, int end2);
evaluatedpoint[][][] slice(evaluatedpoint[][][] a, int start1, int end1, int start2, int end2, int start3, int end3);
positionedvector[][] slice(positionedvector[][] a, int start1, int end1, int start2, int end2);
@@ -3615,8 +3616,8 @@ int[] frequency(real[] data, real a, real b, int n);
int[][] frequency(real[] x, real[] y, real[] xbins, real[] ybins);
int[][] frequency(real[] x, real[] y, pair a, pair b, int nx, int ny=<default>);
int[][] frequency(pair[] z, pair a, pair b, int nx, int ny=<default>);
-real mean(real[] A);
real stdev(real[] A);
+real mean(real[] A);
int bins(real[] data, int max=<default>);
path topbox(pair a, pair b);
path halfbox(pair a, pair b);
@@ -3639,8 +3640,8 @@ pair[] endpoints(guide[] a);
Relation r3;
picture tableau(frame[] cards, bool number=<default>);
pair min(pair[] z);
-Component bp;
Braid apply(Relation r, Braid b, int step, int place);
+Component bp;
Component phi;
real gapfactor;
Component bm;
@@ -3651,8 +3652,8 @@ Braid operator init();
Relation operator init();
Syzygy operator init();
real hwratio;
-Relation r4b;
Relation r4a;
+Relation r4b;
pair max(pair[] z);
pen Orchid;
pen Magenta;
@@ -3662,8 +3663,8 @@ pen CarnationPink;
pen SpringGreen;
pen MidnightBlue;
pen OliveGreen;
-pen Apricot;
pen Aquamarine;
+pen Apricot;
pen Lavender;
pen Cyan;
pen Red;
@@ -3678,18 +3679,18 @@ pen BlueViolet;
pen RedOrange;
pen Goldenrod;
pen ForestGreen;
-pen BurntOrange;
pen YellowOrange;
pen Maroon;
-pen Tan;
+pen BurntOrange;
pen YellowGreen;
+pen Tan;
pen Brown;
pen RubineRed;
pen TealBlue;
pen White;
pen Purple;
-pen Bittersweet;
pen Sepia;
+pen Bittersweet;
pen Orange;
pen OrangeRed;
pen Fuchsia;
@@ -3697,25 +3698,25 @@ pen Peach;
pen PineGreen;
pen Dandelion;
pen VioletRed;
-pen Black;
pen Violet;
+pen Black;
pen NavyBlue;
pen Rhodamine;
-pen ProcessBlue;
pen Thistle;
+pen ProcessBlue;
pen LimeGreen;
+pen DarkOrchid;
pen Green;
pen GreenYellow;
-pen DarkOrchid;
pen Emerald;
-pen Mulberry;
pen WildStrawberry;
+pen Mulberry;
pen RedViolet;
pen SkyBlue;
pen SeaGreen;
pen Periwinkle;
-pen Yellow;
pen Salmon;
+pen Yellow;
pen JungleGreen;
pen CornflowerBlue;
pen RoyalBlue;
@@ -3759,18 +3760,18 @@ v3dtypes operator init();
string VERSION;
pen Orchid;
pen Indigo;
+pen Cornsilk;
pen Beige;
pen SlateBlue;
pen SlateGray;
-pen Cornsilk;
pen Magenta;
pen CadetBlue;
pen DeepPink;
+pen Seashell;
pen SpringGreen;
pen MidnightBlue;
pen Olive;
pen OliveDrab;
-pen Seashell;
pen Aquamarine;
pen GhostWhite;
pen Lavender;
@@ -3782,32 +3783,32 @@ pen PapayaWhip;
pen Red;
pen Pink;
pen MintCream;
+pen LavenderBlush;
pen DarkTurquoise;
+pen Wheat;
pen Gray;
-pen LavenderBlush;
pen MediumBlue;
pen MediumOrchid;
pen MediumPurple;
pen MediumSeaGreen;
pen MediumSlateBlue;
+pen PeachPuff;
pen MediumAquamarine;
pen MediumSpringGreen;
pen MediumTurquoise;
-pen Wheat;
pen MediumVioletRed;
pen Plum;
-pen PeachPuff;
pen Blue;
pen Gold;
pen BlueViolet;
pen Goldenrod;
pen ForestGreen;
-pen Chartreuse;
-pen NavajoWhite;
-pen Maroon;
pen Lime;
+pen Maroon;
pen SteelBlue;
+pen Chartreuse;
pen YellowGreen;
+pen NavajoWhite;
pen Tan;
pen DarkMagenta;
pen AntiqueWhite;
@@ -3820,59 +3821,59 @@ pen Brown;
pen BurlyWood;
pen Moccasin;
pen DarkBlue;
+pen LemonChiffon;
pen Peru;
pen White;
pen Purple;
pen WhiteSmoke;
-pen LemonChiffon;
+pen Aqua;
pen DimGray;
pen Orange;
pen OrangeRed;
pen Fuchsia;
-pen Aqua;
pen Bisque;
pen Honeydew;
+pen Violet;
pen RosyBrown;
pen Black;
-pen Violet;
pen Khaki;
pen FireBrick;
pen Snow;
pen Thistle;
-pen LimeGreen;
pen Sienna;
+pen LimeGreen;
pen OldLace;
+pen DarkOrchid;
pen Green;
pen GreenYellow;
-pen DarkOrchid;
pen DarkCyan;
pen FloralWhite;
pen DarkRed;
+pen DarkOliveGreen;
+pen DarkOrange;
pen BlanchedAlmond;
pen PowderBlue;
pen DarkGray;
pen DarkGreen;
pen DarkGoldenrod;
-pen DarkOliveGreen;
pen SkyBlue;
-pen DarkOrange;
pen SeaGreen;
pen DarkViolet;
pen Teal;
pen AliceBlue;
+pen Silver;
pen HotPink;
pen DodgerBlue;
-pen Silver;
pen SaddleBrown;
pen Tomato;
pen DarkKhaki;
+pen SandyBrown;
pen LightBlue;
+pen Salmon;
pen LightCoral;
pen LightCyan;
pen Yellow;
pen LightGreen;
-pen SandyBrown;
-pen Salmon;
pen PaleGreen;
pen Linen;
pen LightGoldenrodYellow;
@@ -3885,12 +3886,12 @@ pen LightSkyBlue;
pen LightSlateGray;
pen Navy;
pen PaleVioletRed;
+pen DeepSkyBlue;
pen CornflowerBlue;
pen LightSteelBlue;
pen LightYellow;
pen rgbint(int r, int g, int b);
pen Coral;
-pen DeepSkyBlue;
pen MistyRose;
pen DarkSalmon;
pen DarkSeaGreen;
diff --git a/graphics/asymptote/asymptote.spec b/graphics/asymptote/asymptote.spec
index c1bf0606aa..c6312accfa 100644
--- a/graphics/asymptote/asymptote.spec
+++ b/graphics/asymptote/asymptote.spec
@@ -3,7 +3,7 @@
%global __python %{__python3}
Name: asymptote
-Version: 2.90
+Version: 2.91
Release: 1%{?dist}
Summary: Descriptive vector graphics language
diff --git a/graphics/asymptote/base/graph3.asy b/graphics/asymptote/base/graph3.asy
index b9b872f451..7a55ef863d 100644
--- a/graphics/asymptote/base/graph3.asy
+++ b/graphics/asymptote/base/graph3.asy
@@ -68,7 +68,7 @@ triple ticklabelshift(triple align, pen p=currentpen)
// Signature of routines that draw labelled paths with ticks and tick labels.
typedef void ticks3(picture, transform3, Label, path3, path3, pen,
arrowbar3, margin3, ticklocate, int[], bool opposite=false,
- bool primary=true);
+ bool primary=true, projection P);
// Label a tick on a frame.
void labeltick(picture pic, transform3 T, path3 g,
@@ -164,7 +164,8 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null,
{
return new void(picture pic, transform3 t, Label L, path3 g, path3 g2, pen p,
arrowbar3 arrow, margin3 margin, ticklocate locate,
- int[] divisor, bool opposite, bool primary) {
+ int[] divisor, bool opposite, bool primary,
+ projection P=currentprojection) {
// Use local copy of context variables:
int Sign=opposite ? -1 : 1;
int sign=Sign*sign;
@@ -261,17 +262,18 @@ ticks3 Ticks3(int sign, Label F="", ticklabel ticklabel=null,
return new void(picture pic, transform3 T, Label L,
path3 g, path3 g2, pen p,
arrowbar3 arrow, margin3 margin=NoMargin3, ticklocate locate,
- int[] divisor, bool opposite, bool primary) {
+ int[] divisor, bool opposite, bool primary,
+ projection P=currentprojection) {
path3 G=T*g;
real limit=Step == 0 ? axiscoverage*arclength(G) : 0;
tickvalues values=modify(generateticks(sign,F,ticklabel,N,n,Step,step,
Size,size,identity(),1,
- project(G,currentprojection),
+ project(G,P),
limit,p,locate,divisor,
opposite));
Ticks3(sign,F,ticklabel,beginlabel,endlabel,values.major,values.minor,
values.N,begin,end,Size,size,extend,pTick,ptick)
- (pic,T,L,g,g2,p,arrow,margin,locate,divisor,opposite,primary);
+ (pic,T,L,g,g2,p,arrow,margin,locate,divisor,opposite,primary,P);
};
}
@@ -279,7 +281,8 @@ ticks3 NoTicks3()
{
return new void(picture pic, transform3 T, Label L, path3 g,
path3, pen p, arrowbar3 arrow, margin3 margin,
- ticklocate, int[], bool opposite, bool primary) {
+ ticklocate, int[], bool opposite, bool primary,
+ projection P=currentprojection) {
path3 G=T*g;
if(primary) draw(pic,margin(G,p).g,p,arrow,margin);
else draw(pic,G,p);
@@ -478,9 +481,10 @@ void axis(picture pic=currentpicture, Label L="", path3 g, path3 g2=nullpath3,
divisor=copy(divisor);
locate=locate.copy();
- pic.add(new void (picture f, transform3 t, transform3 T, triple, triple) {
+ pic.add(new void (picture f, transform3 t, transform3 T,
+ projection P, triple, triple) {
picture d;
- ticks(d,t,L,g,g2,p,arrow,margin,locate,divisor,opposite,true);
+ ticks(d,t,L,g,g2,p,arrow,margin,locate,divisor,opposite,true,P);
add(f,t*T*inverse(t)*d);
},above=above);
@@ -522,12 +526,13 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis,
real xmin=-infinity, real xmax=infinity, pen p=currentpen,
ticks3 ticks=NoTicks3,
arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=true,
- bool opposite=false, bool opposite2=false, bool primary=true)
+ bool opposite=false, bool opposite2=false, bool primary=true,
+ projection P=currentprojection)
{
int type=axis.type;
int type2=axis.type2;
triple dir=axis.align.dir3 == O ?
- defaultdir(Y,Z,X,opposite^opposite2,currentprojection) : axis.align.dir3;
+ defaultdir(Y,Z,X,opposite^opposite2,P) : axis.align.dir3;
Label L=L.copy();
if(L.align.dir3 == O && L.align.dir == 0) L.align(opposite ? -dir : dir);
@@ -536,8 +541,8 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis,
real y2,z2;
int[] divisor=copy(axis.xdivisor);
- pic.add(new void(picture f, transform3 t, transform3 T, triple lb,
- triple rt) {
+ pic.add(new void(picture f, transform3 t, transform3 T, projection P,
+ triple lb, triple rt) {
transform3 tinv=inverse(t);
triple a=xmin == -infinity ? tinv*(lb.x-min3(p).x,ytrans(t,y),
ztrans(t,z)) : (xmin,y,z);
@@ -573,7 +578,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis,
ticks(d,t,L,a--b,finite(y0) && finite(z0) ? a2--b2 : nullpath3,
p,arrow,margin,
ticklocate(a.x,b.x,pic.scale.x,Dir(dir)),divisor,
- opposite,primary);
+ opposite,primary,P);
add(f,t*T*tinv*d);
},above=above);
@@ -621,7 +626,7 @@ void xaxis3At(picture pic=currentpicture, Label L="", axis axis,
ticks(d,pic.scaling3(warn=false),L,
(a.x,0,0)--(b.x,0,0),(a2.x,0,0)--(b2.x,0,0),p,arrow,margin,
ticklocate(a.x,b.x,pic.scale.x,Dir(dir)),divisor,
- opposite,primary);
+ opposite,primary,P);
frame f;
if(L.s != "") {
Label L0=L.copy();
@@ -655,12 +660,13 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis,
real ymin=-infinity, real ymax=infinity, pen p=currentpen,
ticks3 ticks=NoTicks3,
arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=true,
- bool opposite=false, bool opposite2=false, bool primary=true)
+ bool opposite=false, bool opposite2=false, bool primary=true,
+ projection P=currentprojection)
{
int type=axis.type;
int type2=axis.type2;
triple dir=axis.align.dir3 == O ?
- defaultdir(X,Z,Y,opposite^opposite2,currentprojection) : axis.align.dir3;
+ defaultdir(X,Z,Y,opposite^opposite2,P) : axis.align.dir3;
Label L=L.copy();
if(L.align.dir3 == O && L.align.dir == 0) L.align(opposite ? -dir : dir);
@@ -669,8 +675,8 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis,
real x2,z2;
int[] divisor=copy(axis.ydivisor);
- pic.add(new void(picture f, transform3 t, transform3 T, triple lb,
- triple rt) {
+ pic.add(new void(picture f, transform3 t, transform3 T, projection P,
+ triple lb, triple rt) {
transform3 tinv=inverse(t);
triple a=ymin == -infinity ? tinv*(xtrans(t,x),lb.y-min3(p).y,
ztrans(t,z)) : (x,ymin,z);
@@ -706,7 +712,7 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis,
ticks(d,t,L,a--b,finite(x0) && finite(z0) ? a2--b2 : nullpath3,
p,arrow,margin,
ticklocate(a.y,b.y,pic.scale.y,Dir(dir)),divisor,
- opposite,primary);
+ opposite,primary,P);
add(f,t*T*tinv*d);
},above=above);
@@ -754,7 +760,7 @@ void yaxis3At(picture pic=currentpicture, Label L="", axis axis,
ticks(d,pic.scaling3(warn=false),L,
(0,a.y,0)--(0,b.y,0),(0,a2.y,0)--(0,a2.y,0),p,arrow,margin,
ticklocate(a.y,b.y,pic.scale.y,Dir(dir)),divisor,
- opposite,primary);
+ opposite,primary,P);
frame f;
if(L.s != "") {
Label L0=L.copy();
@@ -788,12 +794,13 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis,
real zmin=-infinity, real zmax=infinity, pen p=currentpen,
ticks3 ticks=NoTicks3,
arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=true,
- bool opposite=false, bool opposite2=false, bool primary=true)
+ bool opposite=false, bool opposite2=false, bool primary=true,
+ projection P=currentprojection)
{
int type=axis.type;
int type2=axis.type2;
triple dir=axis.align.dir3 == O ?
- defaultdir(X,Y,Z,opposite^opposite2,currentprojection) : axis.align.dir3;
+ defaultdir(X,Y,Z,opposite^opposite2,P) : axis.align.dir3;
Label L=L.copy();
if(L.align.dir3 == O && L.align.dir == 0) L.align(opposite ? -dir : dir);
@@ -802,8 +809,8 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis,
real x2,y2;
int[] divisor=copy(axis.zdivisor);
- pic.add(new void(picture f, transform3 t, transform3 T, triple lb,
- triple rt) {
+ pic.add(new void(picture f, transform3 t, transform3 T, projection P,
+ triple lb, triple rt) {
transform3 tinv=inverse(t);
triple a=zmin == -infinity ? tinv*(xtrans(t,x),ytrans(t,y),
lb.z-min3(p).z) : (x,y,zmin);
@@ -839,7 +846,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis,
ticks(d,t,L,a--b,finite(x0) && finite(y0) ? a2--b2 : nullpath3,
p,arrow,margin,
ticklocate(a.z,b.z,pic.scale.z,Dir(dir)),divisor,
- opposite,primary);
+ opposite,primary,P);
add(f,t*T*tinv*d);
},above=above);
@@ -887,7 +894,7 @@ void zaxis3At(picture pic=currentpicture, Label L="", axis axis,
ticks(d,pic.scaling3(warn=false),L,
(0,0,a.z)--(0,0,b.z),(0,0,a2.z)--(0,0,a2.z),p,arrow,margin,
ticklocate(a.z,b.z,pic.scale.z,Dir(dir)),divisor,
- opposite,primary);
+ opposite,primary,P);
frame f;
if(L.s != "") {
Label L0=L.copy();
@@ -945,7 +952,8 @@ void autoscale3(picture pic=currentpicture, axis axis)
void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
real xmin=-infinity, real xmax=infinity, pen p=currentpen,
ticks3 ticks=NoTicks3,
- arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
+ arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false,
+ projection P=currentprojection)
{
if(xmin > xmax) return;
@@ -1001,7 +1009,8 @@ void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
bool back=false;
if(axis.type == Both) {
- triple v=currentprojection.normal;
+ projection P=centered(P,pic);
+ triple v=P.normal;
back=dot((0,pic.userMax().y-pic.userMin().y,0),v)*sgn(v.z) > 0;
}
@@ -1019,7 +1028,8 @@ void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero,
real ymin=-infinity, real ymax=infinity, pen p=currentpen,
ticks3 ticks=NoTicks3,
- arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
+ arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false,
+ projection P=currentprojection)
{
if(ymin > ymax) return;
@@ -1076,7 +1086,8 @@ void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero,
bool back=false;
if(axis.type == Both) {
- triple v=currentprojection.normal;
+ projection P=centered(P,pic);
+ triple v=P.normal;
back=dot((pic.userMax().x-pic.userMin().x,0,0),v)*sgn(v.z) > 0;
}
@@ -1094,7 +1105,8 @@ void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero,
void zaxis3(picture pic=currentpicture, Label L="", axis axis=XYZero,
real zmin=-infinity, real zmax=infinity, pen p=currentpen,
ticks3 ticks=NoTicks3,
- arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
+ arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false,
+ projection P=currentprojection)
{
if(zmin > zmax) return;
@@ -1150,7 +1162,8 @@ void zaxis3(picture pic=currentpicture, Label L="", axis axis=XYZero,
bool back=false;
if(axis.type == Both) {
- triple v=currentprojection.vector();
+ projection P=centered(P,pic);
+ triple v=P.vector();
back=dot((pic.userMax().x-pic.userMin().x,0,0),v)*sgn(v.y) > 0;
}
@@ -1200,11 +1213,12 @@ void axes3(picture pic=currentpicture,
bool extend=false,
triple min=(-infinity,-infinity,-infinity),
triple max=(infinity,infinity,infinity),
- pen p=currentpen, arrowbar3 arrow=None, margin3 margin=NoMargin3)
+ pen p=currentpen, arrowbar3 arrow=None, margin3 margin=NoMargin3,
+ projection P=currentprojection)
{
- xaxis3(pic,xlabel,YZZero(extend),min.x,max.x,p,arrow,margin);
- yaxis3(pic,ylabel,XZZero(extend),min.y,max.y,p,arrow,margin);
- zaxis3(pic,zlabel,XYZero(extend),min.z,max.z,p,arrow,margin);
+ xaxis3(pic,xlabel,YZZero(extend),min.x,max.x,p,arrow,margin,P);
+ yaxis3(pic,ylabel,XZZero(extend),min.y,max.y,p,arrow,margin,P);
+ zaxis3(pic,zlabel,XYZero(extend),min.z,max.z,p,arrow,margin,P);
}
triple Scale(picture pic=currentpicture, triple v)
@@ -1659,7 +1673,7 @@ surface surface(picture pic=currentpicture, triple[][] f, bool[][] cond={})
surface s=surface(count);
s.index=new int[nx][ny];
- int k=-1;
+ int k=0;
for(int i=0; i < nx; ++i) {
bool[] condi,condp;
if(!all) {
@@ -1670,13 +1684,15 @@ surface surface(picture pic=currentpicture, triple[][] f, bool[][] cond={})
triple[] fp=f[i+1];
int[] indexi=s.index[i];
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[] {
+ if(all || (condi[j] && condi[j+1] && condp[j] && condp[j+1])) {
+ s.s[k]=patch(new triple[] {
Scale(pic,fi[j]),
Scale(pic,fp[j]),
Scale(pic,fp[j+1]),
Scale(pic,fi[j+1])});
- indexi[j]=k;
+ indexi[j]=k;
+ ++k;
+ }
}
}
@@ -2062,11 +2078,13 @@ surface surface(picture pic=currentpicture, triple f(pair z),
surface s=surface(sx.length);
s.index=new int[nu][nv];
- int k=-1;
+ int k=0;
for(int i=0; i < nu; ++i) {
int[] indexi=s.index[i];
- for(int j=0; j < nv; ++j)
- indexi[j]=++k;
+ for(int j=0; j < nv; ++j) {
+ indexi[j]=k;
+ ++k;
+ }
}
for(int k=0; k < sx.length; ++k) {
diff --git a/graphics/asymptote/base/grid3.asy b/graphics/asymptote/base/grid3.asy
index 62807847ae..412992f6c4 100644
--- a/graphics/asymptote/base/grid3.asy
+++ b/graphics/asymptote/base/grid3.asy
@@ -193,7 +193,8 @@ void grid3(picture pic=currentpicture,
grid3routines gridroutinej=gridroutine[j];
for(int i=0; i < gridroutinej.length; ++i) {
grid3 gt=gridroutinej[i](pic);
- pic.add(new void(picture f, transform3 t, transform3 T, triple, triple) {
+ pic.add(new void(picture f, transform3 t, transform3 T,
+ projection P, triple, triple) {
picture d;
ticks3 ticks=Ticks3(1,F="%",ticklabel=null,
beginlabel=false,endlabel=false,
@@ -202,7 +203,7 @@ void grid3(picture pic=currentpicture,
Size=0,size=0,extend=true,
pTick=pGrid,ptick=pgrid);
ticks(d,t,"",gt.axea,gt.axeb,nullpen,None,NoMargin3,gt.locate,
- gt.bds.divisor,opposite=true,primary=false);
+ gt.bds.divisor,opposite=true,primary=false,P);
add(f,t*T*inverse(t)*d);
},above=above);
addPath(pic,gt.axea,pGrid);
diff --git a/graphics/asymptote/base/map.asy b/graphics/asymptote/base/map.asy
index 2b2277b956..06c61f7b4b 100644
--- a/graphics/asymptote/base/map.asy
+++ b/graphics/asymptote/base/map.asy
@@ -1,40 +1,36 @@
-// Create a struct <name> parameterized by types <key> and <value>,
-// that maps keys to values, defaulting to the value in <default>.
-void mapTemplate(string name, string key, string value, string default)
-{
- type(key,"Key");
- type(value,"Value");
- eval("Value default="+default,true);
+typedef import(Key, Value);
- eval("
- struct keyValue {
- Key key;
- Value T;
- void operator init(Key key) {
- this.key=key;
- }
- void operator init(Key key, Value T) {
- this.key=key;
- this.T=T;
- }
+struct keyValue {
+ Key key;
+ Value value;
+ void operator init(Key key) {
+ this.key=key;
}
+ void operator init(Key key, Value value) {
+ this.key=key;
+ this.value=value;
+ }
+}
- struct map {
- keyValue[] M;
- bool operator < (keyValue a, keyValue b) {return a.key < b.key;}
+// Map keys to values, defaulting to the value default.
- void add(Key key, Value T) {
- keyValue m=keyValue(key,T);
- M.insert(search(M,m,operator <)+1,m);
- }
- Value lookup(Key key) {
- int i=search(M,keyValue(key),operator <);
- if(i >= 0 && M[i].key == key) return M[i].T;
- return default;
- }
+struct map {
+ keyValue[] M;
+ int Default;
+
+ void operator init(Value Default) {
+ this.Default=Default;
}
-",true);
- type("map",name);
-}
+ bool operator < (keyValue a, keyValue b) {return a.key < b.key;}
+ void add(Key key, Value value) {
+ keyValue m=keyValue(key,value);
+ M.insert(search(M,m,operator <)+1,m);
+ }
+ Value lookup(Key key) {
+ int i=search(M,keyValue(key),operator <);
+ if(i >= 0 && M[i].key == key) return M[i].value;
+ return Default;
+ }
+}
diff --git a/graphics/asymptote/base/mapArray.asy b/graphics/asymptote/base/mapArray.asy
index 5a499b8c68..d6d75e9861 100644
--- a/graphics/asymptote/base/mapArray.asy
+++ b/graphics/asymptote/base/mapArray.asy
@@ -6,4 +6,4 @@ Dst[] map(MapType f, Src[] a) {
return sequence(
new Dst(int i) {return f(a[i]);},
a.length);
-} \ No newline at end of file
+}
diff --git a/graphics/asymptote/base/plain_picture.asy b/graphics/asymptote/base/plain_picture.asy
index 9df0e5753e..8c1fbd99f9 100644
--- a/graphics/asymptote/base/plain_picture.asy
+++ b/graphics/asymptote/base/plain_picture.asy
@@ -733,7 +733,7 @@ struct picture { // <<<1
add(new void(frame f, transform t) {
picture opic=new picture;
d(opic,t);
- add(f,opic.fit(identity()));
+ add(f,opic.fit(identity));
},exact);
}
@@ -745,12 +745,12 @@ struct picture { // <<<1
},exact,above);
}
- void add(void d(picture, transform3, transform3, triple, triple),
+ void add(void d(picture, transform3, transform3, projection, triple, triple),
bool exact=false, bool above=true) {
add(new void(frame f, transform3 t, transform3 T, picture pic2,
projection P, triple lb, triple rt) {
picture opic=new picture;
- d(opic,t,T,lb,rt);
+ d(opic,t,T,P,lb,rt);
add(f,opic.fit3(identity4,pic2,P));
},exact,above);
}
@@ -1134,6 +1134,26 @@ pair size(picture pic, bool user=false)
return t*M-t*m;
}
+// Return a projection adjusted to view center of pic from specified direction.
+projection centered(projection P, picture pic=currentpicture) {
+ projection P=P.copy();
+ if(P.autoadjust && P.center) {
+ triple min=pic.userMin3();
+ triple max=pic.userMax3();
+ if(min != max) {
+ triple target=0.5*(max+min);
+ if(pic.keepAspect)
+ P.camera=target+P.vector();
+ else
+ P.camera=target+realmult(unit(P.vector()),max-min);
+ P.target=target;
+ P.normal=P.vector();
+ P.calculate();
+ }
+ }
+ return P;
+}
+
// Frame Alignment <<<
pair rectify(pair dir)
{
@@ -1608,7 +1628,7 @@ void fill(pair origin, picture pic=currentpicture, path[] g, pen p=currentpen)
{
picture opic;
fill(opic,g,p);
- add(pic,opic,origin);
+ add(pic,opic.fit(identity),origin);
}
void postscript(picture pic=currentpicture, string s)
diff --git a/graphics/asymptote/base/plain_prethree.asy b/graphics/asymptote/base/plain_prethree.asy
index 8866396255..fefa1e5104 100644
--- a/graphics/asymptote/base/plain_prethree.asy
+++ b/graphics/asymptote/base/plain_prethree.asy
@@ -143,7 +143,7 @@ struct projection {
static private real sqrtEpsilon = sqrt(realEpsilon);
// Move the camera so that the box(m,M) rotated about target will always
- // lie in front of the clipping plane.
+ // lie in front of the far clipping plane.
bool adjust(triple m, triple M) {
triple v=camera-target;
real d=distance(m,M);
@@ -161,7 +161,7 @@ projection currentprojection;
struct light {
real[][] diffuse;
- real[][] specular; // For PRC only
+ real[][] specular;
pen background=nullpen; // Background color of the 3D canvas.
real specularfactor;
triple[] position; // Only directional lights are currently implemented.
diff --git a/graphics/asymptote/base/plain_shipout.asy b/graphics/asymptote/base/plain_shipout.asy
index c784c5f462..0fd1b71c7a 100644
--- a/graphics/asymptote/base/plain_shipout.asy
+++ b/graphics/asymptote/base/plain_shipout.asy
@@ -122,6 +122,8 @@ void shipout(string prefix=defaultfilename, picture pic=currentpicture,
string options="", string script="",
light light=currentlight, projection P=currentprojection)
{
+ projection P=centered(P,pic);
+
if(!uptodate()) {
bool inlinetex=settings.inlinetex;
bool prc=prc(format) || settings.v3d;
diff --git a/graphics/asymptote/base/slide.asy b/graphics/asymptote/base/slide.asy
index a695953768..15a2189704 100644
--- a/graphics/asymptote/base/slide.asy
+++ b/graphics/asymptote/base/slide.asy
@@ -17,6 +17,8 @@ real pageheight=-2pagemargin;
bool landscape=orientation == Landscape || orientation == Seascape;
if(landscape) {
+ usepackage("geometry");
+ texpreamble("\geometry{landscape}");
orientation=Portrait;
pagewidth += settings.paperheight;
pageheight += settings.paperwidth;
@@ -401,21 +403,26 @@ void display(string s, string caption="", pair align=S, pen p=itempen,
void figure(string[] s, string options="", real margin=0,
string[] captions=new string[], string caption="",
+ string[] url=new string[],
pair align=S, pen p=itempen, pen figuremattpen=figuremattpen,
bool final=true)
{
string[] S;
for(int i=0; i < s.length; ++i) {
S[i]=graphic(s[i],options);
+ if(i < url.length && url[i] != "")
+ S[i]="\href{"+url[i]+"/"+s[i]+".html}{"+S[i]+"}";
}
display(S,margin,captions,caption,align,itempen,figuremattpen,final);
}
-void figure(string s, string options="", string caption="", pair align=S,
+void figure(string s, string options="", string caption="",
+ string url="", pair align=S,
pen p=itempen, pen figuremattpen=figuremattpen, bool final=true)
{
- figure(new string[] {s},options,caption,align,p,figuremattpen,final);
+ figure(new string[] {s},options,caption,new string[] {url},align,p,
+ figuremattpen,final);
}
void multifigure(string[] slist, string options="", string caption="",
@@ -581,7 +588,7 @@ void bibliography(string name)
real hmargin,vmargin;
if(pdf()) {
hmargin=1;
- vmargin=0;
+ vmargin=0.5;
} else {
hmargin=1.5;
vmargin=1;
diff --git a/graphics/asymptote/base/three.asy b/graphics/asymptote/base/three.asy
index b93833f666..343ca72067 100644
--- a/graphics/asymptote/base/three.asy
+++ b/graphics/asymptote/base/three.asy
@@ -46,21 +46,21 @@ restricted interaction Billboard=interaction(1);
struct render
{
- // PRC parameters:
- real compression; // lossy compression parameter (0=no compression)
+ real compression; // lossy PRC 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?
+ bool closed; // use one-sided PRC rendering?
- bool3 merge; // merge nodes before rendering, for faster but
- // lower quality PRC rendering (the value default means
+ bool tessellate; // use tessellated mesh to store straight patches
+
+ bool3 merge; // merge PRC nodes before rendering, for faster but
+ // lower quality rendering (the value default means
// merge opaque patches only).
int sphere; // PRC sphere type (PRCsphere or NURBSsphere).
// General parameters:
- real margin; // shrink amount for rendered openGL viewport, in bp.
+ real margin; // shrink amount for rendered OpenGL viewport, in bp.
bool partnames; // assign part name indices to compound objects
bool defaultnames; // assign default names to unnamed objects
interaction interaction; // billboard interaction mode
@@ -346,7 +346,7 @@ projection perspective(real x, real y, real z, triple up=Z, triple target=O,
projection orthographic(triple camera, triple up=Z, triple target=O,
real zoom=1, pair viewportshift=0,
- bool showtarget=true, bool center=false)
+ bool showtarget=true, bool center=true)
{
return projection(camera,up,target,zoom,viewportshift,showtarget,
center=center,new transformation(triple camera, triple up,
@@ -356,7 +356,7 @@ projection orthographic(triple camera, triple up=Z, triple target=O,
projection orthographic(real x, real y, real z, triple up=Z,
triple target=O, real zoom=1, pair viewportshift=0,
- bool showtarget=true, bool center=false)
+ bool showtarget=true, bool center=true)
{
return orthographic((x,y,z),up,target,zoom,viewportshift,showtarget,
center=center);
@@ -2679,10 +2679,10 @@ struct scene
warn=false;
}
- if(P.absolute)
- this.P=P.copy();
- else if(P.showtarget && !pic.empty3())
- draw(pic,P.target,nullpen);
+ this.P=P.copy();
+
+ if(!P.absolute && P.showtarget && !pic.empty3())
+ draw(pic,this.P.target,nullpen);
t=pic.scaling(xsize3,ysize3,zsize3,keepAspect,warn);
adjusted=false;
@@ -2690,14 +2690,9 @@ struct scene
triple M=pic.max(t);
if(!P.absolute) {
- this.P=t*P;
+ this.P=t*this.P;
if(this.P.autoadjust || this.P.infinity)
adjusted=adjusted | this.P.adjust(m,M);
- if(this.P.center && settings.render != 0) {
- triple target=0.5*(m+M);
- this.P.target=target;
- this.P.calculate();
- }
}
bool scale=xsize != 0 || ysize != 0;
@@ -2898,11 +2893,13 @@ object embed(string prefix=outprefix(), string label=prefix,
if(primitive())
format=settings.v3d ? "v3d" : settings.outformat;
+ transform3 s=inv*shift(0,0,zcenter);
+
shipout3(prefix,f,preview ? nativeformat() : format,
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,S.viewportmargin,
- tinv*inv*shift(0,0,zcenter),Light.background(),Light.position,
+ tinv*s,s,Light.background(),Light.position,
Light.diffuse,Light.specular,
view && !preview);
if(settings.v3d) {
@@ -3040,13 +3037,13 @@ currentpicture.fitter=new frame(string prefix, picture pic, string format,
bool empty3=pic.empty3();
if(!empty3 || pic.queueErase3) {
f=embedder(new object(string prefix, string format) {
- return embed(prefix=prefix,pic,format,xsize,ysize,keepAspect,view,
- options,script,light,P);
- },prefix,format,view,light);
+ return embed(prefix=prefix,pic,format,xsize,ysize,keepAspect,view,
+ options,script,light,P);
+ },prefix,format,view,light);
pic.queueErase3=false;
}
- if(is3D(format) || pic.queueErase)
+ if(is3D(format) || pic.queueErase || settings.render == 0)
add(f,pic.fit2(xsize,ysize,keepAspect));
return f;
};
diff --git a/graphics/asymptote/base/three_surface.asy b/graphics/asymptote/base/three_surface.asy
index c54b0cc490..d5e9ac47a6 100644
--- a/graphics/asymptote/base/three_surface.asy
+++ b/graphics/asymptote/base/three_surface.asy
@@ -409,14 +409,15 @@ struct patch {
// A constructor for a triangle or convex quadrilateral.
void operator init(triple[] external, triple[] internal=new triple[],
pen[] colors=new pen[], bool3 planar=default) {
- init();
-
straight=true;
if(colors.length != 0)
this.colors=copy(colors);
if(external.length == 3) {
+ triangular=true;
+ this.planar=true;
+ init();
P=new triple[][] {
{external[0]},
{interp(external[0],external[1],1/3),
@@ -426,9 +427,8 @@ struct patch {
{external[1],interp(external[1],external[2],1/3),
interp(external[1],external[2],2/3),external[2]}
};
- planar=true;
- triangular=true;
} else {
+ init();
if(internal.length == 0 && planar == default)
this.planar=normal(external) != O;
else this.planar=planar;
@@ -788,10 +788,11 @@ struct surface {
}
void operator init(triple[][][] P, pen[][] colors=new pen[][],
+ bool3 straight=false,
bool3 planar=default, bool triangular=false) {
s=sequence(new patch(int i) {
- return patch(P[i],colors.length == 0 ? new pen[] : colors[i],planar,
- triangular);
+ return patch(P[i],colors.length == 0 ? new pen[] : colors[i],
+ straight,planar,triangular);
},P.length);
}
@@ -1420,6 +1421,7 @@ void _draw(frame f, path3 g, triple center=O, material m,
int computeNormals(triple[] v, int[][] vi, triple[] n, int[][] ni)
{
triple lastnormal=O;
+ n.delete();
for(int i=0; i < vi.length; ++i) {
int[] vii=vi[i];
int[] nii=ni[i];
@@ -1433,7 +1435,7 @@ int computeNormals(triple[] v, int[][] vi, triple[] n, int[][] ni)
return ni.length;
}
-// Draw triangles on a frame.
+// Draw a triangle group on a frame.
void draw(frame f, triple[] v, int[][] vi,
triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
int[][] pi={}, light light=currentlight, render render=defaultrender)
@@ -1480,21 +1482,25 @@ void draw(frame f, triple[] v, int[][] vi,
render.interaction.type);
}
-// Draw triangles on a picture.
+// Draw a triangle group on a picture.
void draw(picture pic=currentpicture, triple[] v, int[][] vi,
triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
int[][] pi={}, light light=currentlight, render render=defaultrender)
{
- bool normals=ni.length > 0;
- if(!normals) {
- ni=new int[vi.length][3];
- normals=computeNormals(v,vi,n,ni) > 0;
- }
bool colors=pi.length > 0;
+ // TODO: copy inputs
+
pic.add(new void(frame f, transform3 t, picture pic, projection P) {
triple[] v=t*v;
- triple[] n=t*n;
+ bool normals=ni.length > 0;
+ if(normals) {
+ transform3 T=transpose(inverse(shiftless(t)));
+ n=sequence(new triple(int i) {return unit(T*n[i]);},n.length) ;
+ } else {
+ ni=new int[vi.length][3];
+ normals=computeNormals(v,vi,n,ni) > 0;
+ }
if(is3D()) {
render Render=render(render,interaction(render.interaction,
@@ -1539,9 +1545,11 @@ void draw(picture pic=currentpicture, triple[] v, int[][] vi,
}
},true);
- for(int[] vii : vi)
- for(int viij : vii)
- pic.addPoint(v[viij]);
+ for(int[] vii : vi) {
+ pic.addPoint(v[vii[0]]);
+ pic.addPoint(v[vii[1]]);
+ pic.addPoint(v[vii[2]]);
+ }
}
void tensorshade(transform t=identity(), frame f, patch s,
@@ -1684,6 +1692,112 @@ void draw(transform t=identity(), frame f, surface s, int nu=1, int nv=1,
draw(t,f,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render,P);
}
+// draw a triangle group on a frame for the tessellation of a surface
+// containing indexed patches.
+void drawTessellation(frame f, surface s,
+ material surfacepen=currentpen, pen meshpen=nullpen,
+ light light=currentlight, light meshlight=nolight,
+ string name="", render render=defaultrender)
+{
+ int nU=s.index.length;
+ if(nU == 0) return;
+ int nV=s.index[0].length;
+ if(nV == 0) return;
+
+ int N=(nU+1)*(nV+1);
+ triple[] v=new triple[N];
+ triple[] n=new triple[N];
+
+ bool colors=s.s[0].colors.length > 0;
+ pen[] p;
+ if(colors)
+ p=new pen[N];
+
+ int index(int i,int j) {return (nV+1)*i+j;}
+
+ int k=0;
+ for(int U=0; U < nU; ++U) {
+ for(int V=0; V < nV; ++V) {
+ patch q=s.s[s.index[U][V]];
+ v[k]=q.P[0][0];
+ n[k]=unit(q.normal00());
+ if(colors)
+ p[k]=q.colors[0];
+ ++k;
+ }
+ patch q=s.s[s.index[U][nV-1]];
+ v[k]=q.P[0][3];
+ n[k]=unit(q.normal01());
+ if(colors)
+ p[k]=q.colors[3];
+ ++k;
+ }
+
+ for(int V=0; V < nV; ++V) {
+ patch q=s.s[s.index[nU-1][V]];
+ v[k]=q.P[3][0];
+ n[k]=unit(q.normal10());
+ if(colors)
+ p[k]=q.colors[1];
+ ++k;
+ }
+ patch q=s.s[s.index[nU-1][nV-1]];
+ v[k]=q.P[3][3];
+ n[k]=unit(q.normal11());
+ if(colors)
+ p[k]=q.colors[2];
+ ++k;
+
+ int[][] vi=new int[nU*nV][];
+ int k=0;
+ for(int i=0; i < nU; ++i) {
+ for(int j=0; j < nV; ++j) {
+ vi[k]=new int[] {index(i,j),index(i+1,j),index(i+1,j+1)};
+ ++k;
+ vi[k]=new int[] {index(i,j),index(i+1,j+1),index(i,j+1)};
+ ++k;
+ }
+ }
+
+ draw(f,v,vi,n,vi,surfacepen,p,colors ? vi : new int[][],light);
+
+ if(!invisible(meshpen)) {
+ if(is3D()) meshpen=thin()+squarecap+meshpen;
+ bool group=name != "" || render.defaultnames;
+ for(int k=0; k < s.s.length; ++k) {
+ patch q=s.s[k];
+ if(group)
+ begingroup3(f,meshname(name),render);
+ draw(f,q.P[0][0]--q.P[3][0]--q.P[3][3]--q.P[0][3]--cycle,
+ meshpen,meshlight,partname(k,render),render);
+ if(group)
+ endgroup3(f);
+ }
+ }
+}
+
+// draw a triangle group on a picture for the tessellation of a surface
+// containing indexed patches.
+void drawTessellation(picture pic=currentpicture, surface s,
+ material surfacepen=currentpen, pen meshpen=nullpen,
+ light light=currentlight, light meshlight=nolight,
+ string name="", render render=defaultrender)
+{
+ pic.add(new void(frame f, transform3 t, picture, projection) {
+ drawTessellation(f,t*s,surfacepen,meshpen,light,meshlight,name,render);
+ },true);
+
+ pic.addPoint(min(s));
+ pic.addPoint(max(s));
+
+ if(!invisible(meshpen)) {
+ for(int k=0; k < s.s.length; ++k) {
+ patch q=s.s[k];
+ addPath(pic,q.P[0][0]--q.P[3][0]--q.P[3][3]--q.P[0][3]--cycle,meshpen);
+ }
+ }
+}
+
void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1,
material[] surfacepen, pen[] meshpen=nullpens,
light light=currentlight, light meshlight=nolight, string name="",
@@ -1691,12 +1805,8 @@ void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1,
{
if(s.empty()) return;
- bool cyclic=surfacepen.cyclic;
surfacepen=copy(surfacepen);
- surfacepen.cyclic=cyclic;
- cyclic=meshpen.cyclic;
meshpen=copy(meshpen);
- meshpen.cyclic=cyclic;
pic.add(new void(frame f, transform3 t, picture pic, projection P) {
surface S=t*s;
@@ -1738,11 +1848,15 @@ void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1,
light light=currentlight, light meshlight=nolight, 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,render);
+ if(render.tessellate && s.index.length > 0 && settings.render != 0) {
+ drawTessellation(pic,s,surfacepen,meshpen,light,meshlight,name,render);
+ } else {
+ material[] surfacepen={surfacepen};
+ surfacepen.cyclic=true;
+ pen[] meshpen={meshpen};
+ meshpen.cyclic=true;
+ draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render);
+ }
}
void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1,
diff --git a/graphics/asymptote/base/v3dheadertypes.asy b/graphics/asymptote/base/v3dheadertypes.asy
index aff3ebd34d..d8a2ebd7b4 100644
--- a/graphics/asymptote/base/v3dheadertypes.asy
+++ b/graphics/asymptote/base/v3dheadertypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dheadertypes
// AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2024-06-21 17:45:18+00:00
+// Generated at 2024-08-15 05:44:42+00:00
struct v3dheadertypes
{
diff --git a/graphics/asymptote/base/v3dtypes.asy b/graphics/asymptote/base/v3dtypes.asy
index 97517ebae2..89bd3c20fd 100644
--- a/graphics/asymptote/base/v3dtypes.asy
+++ b/graphics/asymptote/base/v3dtypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dtypes
// AUTO-GENERATED from v3dtypes.csv
-// Generated at 2024-06-21 17:45:18+00:00
+// Generated at 2024-08-15 05:44:42+00:00
struct v3dtypes
{
diff --git a/graphics/asymptote/base/webgl/asygl.js b/graphics/asymptote/base/webgl/asygl.js
index b5f77299a6..5b9fbfa649 100644
--- a/graphics/asymptote/base/webgl/asygl.js
+++ b/graphics/asymptote/base/webgl/asygl.js
@@ -1,6 +1,6 @@
/*@license
AsyGL: Render Bezier patches and triangles via subdivision with WebGL.
- Copyright 2019-2022: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
+ Copyright 2019-2024: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
University of Alberta
This program is free software; you can redistribute it and/or modify
@@ -36,4 +36,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.*/
-let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n vec4 v=vec4(position,1.0);\n gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n ViewPosition=(viewMat*v).xyz;\n#endif\n Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n MaterialIndex=int(materialIndex);\n#ifdef COLOR\n Color=color;\n#endif\n#else\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[int(abs(materialIndex))-1];\n emissive=m.emissive;\n if(materialIndex >= 0.0)\n diffuse=m.diffuse;\n else {\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n }\n#else\n m=Materials[int(materialIndex)];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int MaterialIndex;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n vec3 direction;\n vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n float x=cart.x;\n float y=cart.z;\n float z=cart.y;\n\n float r=length(cart);\n float theta=r > 0.0 ? acos(z/r) : 0.0;\n float phi=atan(y,x);\n\n return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n vec3 sphericalVec=cart2sphere(cartVec);\n sphericalVec.y=sphericalVec.y*piInv;\n sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n vec3 reflectVec=normalize(reflect(-viewDir,normal));\n vec2 reflCoord=normalizedAngle(reflectVec);\n vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n vec3 metal=diffuse.rgb*IBLRefl;\n return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n float ndoth=max(dot(normal,h),0.0);\n float alpha2=Roughness2*Roughness2;\n float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n float ndotv=max(dot(v,normal),0.0);\n float ap=1.0+Roughness2;\n float k=0.125*ap*ap;\n return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n float a=1.0-max(dot(h,v),0.0);\n float b=a*a;\n return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n vec3 lambertian=diffuse.rgb;\n vec3 h=normalize(lightDirection+viewDirection);\n\n float omegain=max(dot(viewDirection,normal),0.0);\n float omegaln=max(dot(lightDirection,normal),0.0);\n\n float D=NDF_TRG(h);\n float G=Geom(viewDirection,lightDirection);\n float F=Fresnel(h,viewDirection,fresnel0);\n\n float denom=4.0*omegain*omegaln;\n float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n vec3 metal=rawReflectance*diffuse.rgb;\n\n return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[abs(MaterialIndex)-1];\n emissive=m.emissive;\n if(MaterialIndex >= 0)\n diffuse=m.diffuse;\n else {\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n }\n#else\n m=Materials[MaterialIndex];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n normal=normalize(Normal);\n normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n color=IBLColor(viewDir);\n#else\n Roughness2=roughness*roughness;\n color=emissive.rgb;\n for(int i=0; i < nlights; ++i) {\n Light Li=Lights[i];\n vec3 L=Li.direction;\n float cosTheta=max(dot(normal,L),0.0);\n vec3 radiance=cosTheta*Li.color;\n color += BRDF(viewDir,L)*radiance;\n }\n#endif\n OUTVALUE=vec4(color,diffuse.a);\n#else\n OUTVALUE=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=n*Math.max(1,Math.abs(t),Math.abs(e))};var n=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var n=s(i(2)),r=s(i(3));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=n,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*a-o*l,m=-c*s+o*h,f=l*s-a*h,u=i*d+n*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*n+r*l)*u,t[2]=(o*n-r*a)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*s)*u,t[6]=f*u,t[7]=(-l*i+n*h)*u,t[8]=(a*i-n*s)*u,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],x=e[15],g=i*o-n*a,w=i*h-r*a,M=i*l-s*a,b=n*h-r*o,R=n*l-s*o,T=r*l-s*h,y=c*p-d*u,A=c*v-m*u,E=c*x-f*u,I=d*v-m*p,L=d*x-f*p,N=m*x-f*v,O=g*N-w*L+M*I+b*E-R*A+T*y;if(!O)return null;return O=1/O,t[0]=(o*N-h*L+l*I)*O,t[1]=(r*L-n*N-s*I)*O,t[2]=(p*T-v*R+x*b)*O,t[3]=(m*R-d*T-f*b)*O,t[4]=(h*E-a*N-l*A)*O,t[5]=(i*N-r*E+s*A)*O,t[6]=(v*M-u*T-x*w)*O,t[7]=(c*T-m*M+f*w)*O,t[8]=(a*L-o*E+l*y)*O,t[9]=(n*E-i*L-s*y)*O,t[10]=(u*R-p*M+x*g)*O,t[11]=(d*M-c*R-f*g)*O,t[12]=(o*A-a*I-h*y)*O,t[13]=(i*I-n*A+r*y)*O,t[14]=(p*w-u*b-v*g)*O,t[15]=(c*b-d*w+m*g)*O,t},e.multiply=r,e.translate=function(t,e,i){var n=i[0],r=i[1],s=i[2],a=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,x=void 0;e===t?(t[12]=e[0]*n+e[4]*r+e[8]*s+e[12],t[13]=e[1]*n+e[5]*r+e[9]*s+e[13],t[14]=e[2]*n+e[6]*r+e[10]*s+e[14],t[15]=e[3]*n+e[7]*r+e[11]*s+e[15]):(a=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=x,t[12]=a*n+c*r+u*s+e[12],t[13]=o*n+d*r+p*s+e[13],t[14]=h*n+m*r+v*s+e[14],t[15]=l*n+f*r+x*s+e[15]);return t},e.rotate=function(t,e,i,r){var s,a,o,h,l,c,d,m,f,u,p,v,x,g,w,M,b,R,T,y,A,E,I,L,N=r[0],O=r[1],_=r[2],P=Math.sqrt(N*N+O*O+_*_);if(Math.abs(P)<n.EPSILON)return null;N*=P=1/P,O*=P,_*=P,s=Math.sin(i),a=Math.cos(i),o=1-a,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],x=e[9],g=e[10],w=e[11],M=N*N*o+a,b=O*N*o+_*s,R=_*N*o-O*s,T=N*O*o-_*s,y=O*O*o+a,A=_*O*o+N*s,E=N*_*o+O*s,I=O*_*o-N*s,L=_*_*o+a,t[0]=h*M+m*b+v*R,t[1]=l*M+f*b+x*R,t[2]=c*M+u*b+g*R,t[3]=d*M+p*b+w*R,t[4]=h*T+m*y+v*A,t[5]=l*T+f*y+x*A,t[6]=c*T+u*y+g*A,t[7]=d*T+p*y+w*A,t[8]=h*E+m*I+v*L,t[9]=l*E+f*I+x*L,t[10]=c*E+u*I+g*L,t[11]=d*E+p*I+w*L,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,s,a,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<n.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),s=Math.cos(e),a=1-s,t[0]=o*o*a+s,t[1]=h*o*a+l*r,t[2]=l*o*a-h*r,t[3]=0,t[4]=o*h*a-l*r,t[5]=h*h*a+s,t[6]=l*h*a+o*r,t[7]=0,t[8]=o*l*a+h*r,t[9]=h*l*a-o*r,t[10]=l*l*a+s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,n,r,s,a){var o=1/(i-e),h=1/(r-n),l=1/(s-a);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+n)*h,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,n,r,s,a){var o=1/(e-i),h=1/(n-r),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+n)*h,t[14]=(a+s)*l,t[15]=1,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var n=e[0],r=e[1],s=e[2],a=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],x=e[14],g=e[15],w=i[0],M=i[1],b=i[2],R=i[3];return t[0]=w*n+M*o+b*d+R*p,t[1]=w*r+M*h+b*m+R*v,t[2]=w*s+M*l+b*f+R*x,t[3]=w*a+M*c+b*u+R*g,w=i[4],M=i[5],b=i[6],R=i[7],t[4]=w*n+M*o+b*d+R*p,t[5]=w*r+M*h+b*m+R*v,t[6]=w*s+M*l+b*f+R*x,t[7]=w*a+M*c+b*u+R*g,w=i[8],M=i[9],b=i[10],R=i[11],t[8]=w*n+M*o+b*d+R*p,t[9]=w*r+M*h+b*m+R*v,t[10]=w*s+M*l+b*f+R*x,t[11]=w*a+M*c+b*u+R*g,w=i[12],M=i[13],b=i[14],R=i[15],t[12]=w*n+M*o+b*d+R*p,t[13]=w*r+M*h+b*m+R*v,t[14]=w*s+M*l+b*f+R*x,t[15]=w*a+M*c+b*u+R*g,t}}])})),function(){document.asy={canvasWidth:0,canvasHeight:0,absolute:!1,minBound:[0,0,0],maxBound:[0,0,0],orthographic:!1,angleOfView:0,initialZoom:0,viewportShift:[0,0],viewportMargin:[0,0],background:[],zoomFactor:0,zoomPinchFactor:0,zoomPinchCap:0,zoomStep:0,shiftHoldDistance:0,shiftWaitTime:0,vibrateTime:0,ibl:!1,webgl2:!1,imageURL:"",image:"",Transform:[],Centers:[]};let t,e,i,n,r,s,a,o=document.asy,h=[],l=[],c=[],d=0,m=2;const f=Math.acos(-1),u=f/180,p=Math.ceil(1-Math.log2(Number.EPSILON));let v,x,g,w,M,b,R,T=mat4.create(),y=mat4.create(),A=mat4.create(),E=mat4.create(),I=mat3.create(),L=mat3.create(),N=mat4.create(),O=mat4.create(),_={x:0,y:0,z:0},P={x:0,y:0},S={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},U=!0,V=0,B=!1,D=null,C=null,F=[],z=[],H=[],X=[],G=null,W=null,j=null;function k(){o.embedded||st(),rt(o.ibl)}class Y{constructor(t,e,i,n,r,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=n,this.metallic=r,this.fresnel0=s}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Materials["+i+"]."+n);t.uniform4fv(n("diffuse"),new Float32Array(this.diffuse)),t.uniform4fv(n("emissive"),new Float32Array(this.emissive)),t.uniform4fv(n("specular"),new Float32Array(this.specular)),t.uniform4f(n("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let $,q,K,Z,Q,J,tt,et,it;class nt{constructor(t,e){this.direction=t,this.color=e}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Lights["+i+"]."+n);t.uniform3fv(n("direction"),new Float32Array(this.direction)),t.uniform3fv(n("color"),new Float32Array(this.color))}}function rt(e=!1){let i=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS);r=Math.floor((i-14)/4),m=Math.min(Math.max(m,c.length),r),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),xe=Lt(pixelOpt),ge=Lt(materialOpt),we=Lt(colorOpt),Me=Lt(transparentOpt)}function st(){t.deleteProgram(Me),t.deleteProgram(we),t.deleteProgram(ge),t.deleteProgram(xe)}function at(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];i.gl=t,i.nlights=l.length,i.Nmaterials=m,i.maxMaterials=r,i.pixelShader=xe,i.materialShader=ge,i.colorShader=we,i.transparentShader=Me}function ot(t,e){let i;return o.webgl2&&(i=t.getContext("webgl2",{alpha:e}),o.embedded&&!i)?(o.webgl2=!1,o.ibl=!1,ht(!1),null):(i||(o.webgl2=!1,o.ibl=!1,i=t.getContext("webgl",{alpha:e})),i||alert("Could not initialize WebGL"),i)}function ht(s=!0){if(o.ibl&&(o.webgl2=!0),e=o.background[3]<1,o.embedded){let a=window.top.document;if(s&&(n=o.canvas.getContext("2d")),i=o.webgl2?a.offscreen2:a.offscreen,i||(i=a.createElement("canvas"),o.webgl2?a.offscreen2=i:a.offscreen=i),o.webgl2?a.asygl2||(a.asygl2=Array(2)):a.asygl||(a.asygl=Array(2)),asygl=o.webgl2?a.asygl2:a.asygl,asygl[e]&&asygl[e].gl)!function(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];t=i.gl,d=i.nlights,m=i.Nmaterials,r=i.maxMaterials,xe=i.pixelShader,ge=i.materialShader,we=i.colorShader,Me=i.transparentShader}(),(l.length!=d||Math.min(c.length,r)>m)&&(rt(),at());else{if(rc=ot(i,e),!rc)return;t=rc,rt(),o.webgl2?a.asygl2[e]={}:a.asygl[e]={},at()}}else t=ot(o.canvas,e),rt();$=t.getExtension("OES_element_index_uint"),q=t.TRIANGLES,K=new mt(t.POINTS),Z=new mt(t.LINES),Q=new mt,J=new mt,tt=new mt,et=new mt}function lt(t,e,i,n=[]){let r=o.webgl2?"300 es":"100",s=Array(...n),a=[["nlights",0==V?l.length:0],["Nmaterials",m]],h=[["int","Nlights",Math.max(l.length,1)]];o.webgl2&&s.push("WEBGL2"),o.ibl&&a.push(["ROUGHNESS_STEP_COUNT",8..toFixed(2)]),o.orthographic&&s.push("ORTHOGRAPHIC"),macros_str=a.map(t=>`#define ${t[0]} ${t[1]}`).join("\n"),define_str=s.map(t=>"#define "+t).join("\n"),const_str=h.map(t=>`const ${t[0]} ${t[1]}=${t[2]};`).join("\n"),ext_str=[].map(t=>`#extension ${t}: enable`).join("\n"),shaderSrc=`#version ${r}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n \n${e}\n `;let c=t.createShader(i);return t.shaderSource(c,shaderSrc),t.compileShader(c),t.getShaderParameter(c,t.COMPILE_STATUS)?c:(alert(t.getShaderInfoLog(c)),null)}function ct(e,i,n,r=t.ARRAY_BUFFER){return e.length>0&&(0==i&&(i=t.createBuffer(),n=!0),t.bindBuffer(r,i),n&&t.bufferData(r,e,t.STATIC_DRAW)),i}function dt(e,i,n=e.indices){if(0==e.indices.length)return;let r=i!=xe;!function(e,i){let n=i==xe;t.useProgram(i),t.enableVertexAttribArray(Tt),n&&t.enableVertexAttribArray(It);let r=!n&&l.length>0;r&&t.enableVertexAttribArray(yt);t.enableVertexAttribArray(At),i.projViewMatUniform=t.getUniformLocation(i,"projViewMat"),i.viewMatUniform=t.getUniformLocation(i,"viewMat"),i.normMatUniform=t.getUniformLocation(i,"normMat"),(i==we||i==Me)&&t.enableVertexAttribArray(Et);if(r)for(let t=0;t<l.length;++t)l[t].setUniform(i,t);for(let t=0;t<e.materials.length;++t)e.materials[t].setUniform(i,t);t.uniformMatrix4fv(i.projViewMatUniform,!1,E),t.uniformMatrix4fv(i.viewMatUniform,!1,A),t.uniformMatrix3fv(i.normMatUniform,!1,I)}(e,i),null!=W&&(t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,j),t.uniform1i(t.getUniformLocation(i,"reflBRDFSampler"),0),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,W),t.uniform1i(t.getUniformLocation(i,"diffuseSampler"),1),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,G),t.uniform1i(t.getUniformLocation(i,"reflImgSampler"),2));let s=U||e.partial||!e.rendered;e.verticesBuffer=ct(new Float32Array(e.vertices),e.verticesBuffer,s),t.vertexAttribPointer(Tt,3,t.FLOAT,!1,r?24:16,0),r?l.length>0&&t.vertexAttribPointer(yt,3,t.FLOAT,!1,24,12):t.vertexAttribPointer(It,1,t.FLOAT,!1,16,12),e.materialsBuffer=ct(new Int16Array(e.materialIndices),e.materialsBuffer,s),t.vertexAttribPointer(At,1,t.SHORT,!1,2,0),i!=we&&i!=Me||(e.colorsBuffer=ct(new Float32Array(e.colors),e.colorsBuffer,s),t.vertexAttribPointer(Et,4,t.FLOAT,!0,0,0)),e.indicesBuffer=ct($?new Uint32Array(n):new Uint16Array(n),e.indicesBuffer,s,t.ELEMENT_ARRAY_BUFFER),e.rendered=!0,t.drawElements(r?V?t.LINES:e.type:t.POINTS,n.length,$?t.UNSIGNED_INT:t.UNSIGNED_SHORT,0)}class mt{constructor(t){this.type=t||q,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(it),this.nvertices++}iVertex(t,e,i,n=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=it;let s=4*t;this.colors[s]=n[0],this.colors[s+1]=n[1],this.colors[s+2]=n[2],this.colors[s+3]=n[3],this.indices.push(t)}append(t){ft(this.vertices,t.vertices),ft(this.materialIndices,t.materialIndices),ft(this.colors,t.colors),function(t,e,i){let n=t.length,r=e.length;t.length+=e.length;for(let s=0;s<r;++s)t[n+s]=e[s]+i}(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function ft(t,e){let i=t.length,n=e.length;t.length+=n;for(let r=0;r<n;++r)t[i+r]=e[r]}class ut{constructor(){this.data=new mt,this.Onscreen=!1,this.m=[]}offscreen(t){let e=E,i=t[0],n=i[0],r=i[1],s=i[2],a=1/(e[3]*n+e[7]*r+e[11]*s+e[15]);this.x=this.X=(e[0]*n+e[4]*r+e[8]*s+e[12])*a,this.y=this.Y=(e[1]*n+e[5]*r+e[9]*s+e[13])*a;for(let i=1,n=t.length;i<n;++i){let n=t[i],r=n[0],s=n[1],a=n[2],o=1/(e[3]*r+e[7]*s+e[11]*a+e[15]),h=(e[0]*r+e[4]*s+e[8]*a+e[12])*o,l=(e[1]*r+e[5]*s+e[9]*a+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],n=this.c[2],r=t[0]-e,s=t[1]-i,a=t[2]-n;return[r*I[0]+s*I[3]+a*I[6]+e,r*I[1]+s*I[4]+a*I[7]+i,r*I[2]+s*I[5]+a*I[8]+n]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=m&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(c[this.MaterialIndex])),it=t.materialTable[this.MaterialIndex]}render(){let t;var e,i;if(this.setMaterialIndex(),0==this.CenterIndex?(e=this.Min,i=this.Max,t=[e,[e[0],e[1],i[2]],[e[0],i[1],e[2]],[e[0],i[1],i[2]],[i[0],e[1],e[2]],[i[0],e[1],i[2]],[i[0],i[1],e[2]],i]):(this.c=o.Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let n,r=this.controlpoints;if(0==this.CenterIndex){if(!U&&this.Onscreen)return void this.append();n=r}else{let t=r.length;n=Array(t);for(let e=0;e<t;++e)n[e]=this.T(r[e])}let s=o.orthographic?1:this.Min[2]/o.maxBound[2],a=.75*Math.hypot(s*(S.xmax-S.xmin),s*(S.ymax-S.ymin))/b;this.res2=a*a,this.Epsilon=.1*a,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(n)}}function pt(t,e){let i=t[0],n=t.length;for(let r=1;r<n;++r)i=e(i,t[r]);return i}class vt extends ut{constructor(t,e,i,n,r,s){super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,this.color=n;let a=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==a||4==a?t+n[3][3]<1020:t<765}else this.transparent=c[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data);let o=this.L2norm2(this.controlpoints),h=Math.sqrt(1e3*Number.EPSILON*o);this.epsilon=o*Number.EPSILON,this.Min=r||this.Bounds(this.controlpoints,Math.min,h),this.Max=s||this.Bounds(this.controlpoints,Math.max,h)}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.color?this.setMaterial(J,Ae):this.setMaterial(Q,ye)}cornerbound(t,e){let i=e(t[0],t[3]);return i=e(i,t[12]),e(i,t[15])}controlbound(t,e){let i=e(t[1],t[2]);return i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[6]),i=e(i,t[7]),i=e(i,t[8]),i=e(i,t[9]),i=e(i,t[10]),i=e(i,t[11]),i=e(i,t[13]),e(i,t[14])}bound(t,e,i,n,r){if(i=e(i,this.cornerbound(t,e)),e(-1,1)*(i-this.controlbound(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Nt(t[0],t[1],t[2],t[3]),a=new Nt(t[4],t[5],t[6],t[7]),o=new Nt(t[8],t[9],t[10],t[11]),h=new Nt(t[12],t[13],t[14],t[15]),l=new Nt(t[0],t[4],t[8],t[12]),c=new Nt(s.m0,a.m0,o.m0,h.m0),d=new Nt(s.m3,a.m3,o.m3,h.m3),m=new Nt(s.m5,a.m5,o.m5,h.m5),f=new Nt(s.m4,a.m4,o.m4,h.m4),u=new Nt(s.m2,a.m2,o.m2,h.m2),p=new Nt(t[3],t[7],t[11],t[15]),v=[t[0],s.m0,s.m3,s.m5,l.m0,c.m0,d.m0,m.m0,l.m3,c.m3,d.m3,m.m3,l.m5,c.m5,d.m5,m.m5];i=this.bound(v,e,i,n,r);let x=[l.m5,c.m5,d.m5,m.m5,l.m4,c.m4,d.m4,m.m4,l.m2,c.m2,d.m2,m.m2,t[12],h.m0,h.m3,h.m5];i=this.bound(x,e,i,n,r);let g=[m.m5,f.m5,u.m5,p.m5,m.m4,f.m4,u.m4,p.m4,m.m2,f.m2,u.m2,p.m2,h.m5,h.m4,h.m2,t[15]];i=this.bound(g,e,i,n,r);let w=[s.m5,s.m4,s.m2,t[3],m.m0,f.m0,u.m0,p.m0,m.m3,f.m3,u.m3,p.m3,m.m5,f.m5,u.m5,p.m5];return this.bound(w,e,i,n,r)}cornerboundtri(t,e){let i=e(t[0],t[6]);return e(i,t[9])}controlboundtri(t,e){let i=e(t[1],t[2]);return i=e(i,t[3]),i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[7]),e(i,t[8])}boundtri(t,e,i,n,r){if(i=e(i,this.cornerboundtri(t,e)),e(-1,1)*(i-this.controlboundtri(t,e))>=-n||0==r)return i;--r,n*=2;let s=new _t(t),a=[s.l003,s.l102,s.l012,s.l201,s.l111,s.l021,s.l300,s.l210,s.l120,s.l030];i=this.boundtri(a,e,i,n,r);let o=[s.l300,s.r102,s.r012,s.r201,s.r111,s.r021,s.r300,s.r210,s.r120,s.r030];i=this.boundtri(o,e,i,n,r);let h=[s.l030,s.u102,s.u012,s.u201,s.u111,s.u021,s.r030,s.u210,s.u120,s.u030];i=this.boundtri(h,e,i,n,r);let l=[s.r030,s.u201,s.r021,s.u102,s.c111,s.r012,s.l030,s.l120,s.l210,s.l300];return this.boundtri(l,e,i,n,r)}Bounds(t,e,i){let n=Array(3),r=t.length,s=Array(r);for(let a=0;a<3;++a){for(let e=0;e<r;++e)s[e]=t[e][a];n[a]=16==r?this.bound(s,e,s[0],i,p):10==r?this.boundtri(s,e,s[0],i,p):pt(s,e)}return[n[0],n[1],n[2]]}L2norm2(t){let e=t[0],i=0,n=t.length;for(let r=1;r<n;++r)i=Math.max(i,St([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));return i}processTriangle(t){let e=t[0],i=t[1],n=t[2],r=Pt(Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-e[0],n[1]-e[1],n[2]-e[2]]));if(!this.offscreen([e,i,n])){let t,s,a;this.color?(t=this.data.Vertex(e,r,this.color[0]),s=this.data.Vertex(i,r,this.color[1]),a=this.data.Vertex(n,r,this.color[2])):(t=this.vertex(e,r),s=this.vertex(i,r),a=this.vertex(n,r)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],n=t[2],r=t[3],s=Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-i[0],n[1]-i[1],n[2]-i[2]]),a=Vt([n[0]-r[0],n[1]-r[1],n[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=Pt([s[0]+a[0],s[1]+a[1],s[2]+a[2]]);if(!this.offscreen([e,i,n,r])){let t,s,a,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),a=this.data.Vertex(n,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),a=this.vertex(n,o),h=this.vertex(r,o)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,n,r){new wt([t[e],t[i],t[n],t[r]],0,it,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=V&&(it=this.color?-1-it:1+it),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==V)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],n=t[12],r=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],n);St(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r),St(s)<this.epsilon&&(s=this.normal(r,t[11],t[7],i,t[4],t[8],n)));let a=this.normal(e,t[4],t[8],n,t[13],t[14],r);St(a)<this.epsilon&&(a=this.normal(e,t[4],t[8],n,t[11],t[7],i),St(a)<this.epsilon&&(a=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(n,t[13],t[14],r,t[11],t[7],i);St(o)<this.epsilon&&(o=this.normal(n,t[13],t[14],r,t[2],t[1],e),St(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],n,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(St(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],n),St(h)<this.epsilon&&(h=this.normal(n,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,s,l),u=this.data.Vertex(n,a,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,n,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(n,a),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,n,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):this.color?J.append(this.data):Q.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:this.color?J.rendered=!1:Q.rendered=!1}Render(t,e,i,n,r,s,a,o,h,l,c,d,m,f,u,p,v){let x=this.Distance(t);if(x[0]<this.res2&&x[1]<this.res2)this.offscreen([s,a,o])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n))),this.offscreen([s,o,h])||(0==V?(this.data.indices.push(e),this.data.indices.push(n),this.data.indices.push(r)):(this.data.indices.push(n),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let g=t[0],w=t[3],M=t[12],b=t[15];if(x[0]<this.res2){let x=new Ot(g,t[1],t[2],w),R=new Ot(t[4],t[5],t[6],t[7]),T=new Ot(t[8],t[9],t[10],t[11]),y=new Ot(M,t[13],t[14],b),A=[g,x.m0,x.m3,x.m5,t[4],R.m0,R.m3,R.m5,t[8],T.m0,T.m3,T.m5,M,y.m0,y.m3,y.m5],E=[x.m5,x.m4,x.m2,w,R.m5,R.m4,R.m2,t[7],T.m5,T.m4,T.m2,t[11],y.m5,y.m4,y.m2,b],I=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);St(I)<=this.epsilon&&(I=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let L=this.normal(E[3],E[2],E[1],E[0],E[4],E[8],E[12]);St(L)<=this.epsilon&&(L=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15]),St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12])));let N=this.Epsilon,O=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(E[12],E[8],E[4],E[0]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[15];let _=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(A[3],A[7],A[11],A[15]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[0];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),x[e]=.5*(v[e]+f[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,i,g,w,s,a,O,_,l,c,!1,m,f,u,t,x),this.Render(E,w,g,n,r,_,O,o,h,!1,c,d,m,x,t,p,v)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,i,t,f,s,a,O,_,l,c,!1,m),this.Render(E,f,t,n,r,_,O,o,h,!1,c,d,m)}return}if(x[1]<this.res2){let x=new Ot(g,t[4],t[8],M),R=new Ot(t[1],t[5],t[9],t[13]),T=new Ot(t[2],t[6],t[10],t[14]),y=new Ot(w,t[7],t[11],b),A=[g,t[1],t[2],w,x.m0,R.m0,T.m0,y.m0,x.m3,R.m3,T.m3,y.m3,x.m5,R.m5,T.m5,y.m5],E=[x.m5,R.m5,T.m5,y.m5,x.m4,R.m4,T.m4,y.m4,x.m2,R.m2,T.m2,y.m2,M,t[13],t[14],b],I=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),St(I)<=this.epsilon&&(I=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let L=this.normal(E[15],E[11],E[7],E[3],E[2],E[1],E[0]);St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12]),St(L)<=this.epsilon&&(L=this.normal(E[12],E[13],E[14],E[15],E[2],E[1],E[0])));let N=this.Epsilon,O=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(E[0],E[1],E[2],E[3]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[12];let _=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(A[15],A[14],A[13],A[12]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[3];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(p[e]+v[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,g,w,r,s,O,_,h,l,!1,d,m,f,t,x,v),this.Render(E,g,i,n,w,O,a,o,_,l,c,d,!1,t,u,p,x)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,t,f,r,s,O,_,h,l,!1,d,m),this.Render(E,t,i,n,f,O,a,o,_,l,c,d,!1)}return}let R=new Ot(g,t[1],t[2],w),T=new Ot(t[4],t[5],t[6],t[7]),y=new Ot(t[8],t[9],t[10],t[11]),A=new Ot(M,t[13],t[14],b),E=new Ot(g,t[4],t[8],M),I=new Ot(R.m0,T.m0,y.m0,A.m0),L=new Ot(R.m3,T.m3,y.m3,A.m3),N=new Ot(R.m5,T.m5,y.m5,A.m5),O=new Ot(R.m4,T.m4,y.m4,A.m4),_=new Ot(R.m2,T.m2,y.m2,A.m2),P=new Ot(w,t[7],t[11],b),S=[g,R.m0,R.m3,R.m5,E.m0,I.m0,L.m0,N.m0,E.m3,I.m3,L.m3,N.m3,E.m5,I.m5,L.m5,N.m5],U=[E.m5,I.m5,L.m5,N.m5,E.m4,I.m4,L.m4,N.m4,E.m2,I.m2,L.m2,N.m2,M,A.m0,A.m3,A.m5],V=[N.m5,O.m5,_.m5,P.m5,N.m4,O.m4,_.m4,P.m4,N.m2,O.m2,_.m2,P.m2,A.m5,A.m4,A.m2,b],B=[R.m5,R.m4,R.m2,w,N.m0,O.m0,_.m0,P.m0,N.m3,O.m3,_.m3,P.m3,N.m5,O.m5,_.m5,P.m5],D=S[15],C=this.normal(S[0],S[4],S[8],S[12],S[13],S[14],S[15]);St(C)<this.epsilon&&(C=this.normal(S[0],S[4],S[8],S[12],S[11],S[7],S[3]),St(C)<this.epsilon&&(C=this.normal(S[3],S[2],S[1],S[0],S[13],S[14],S[15])));let F=this.normal(U[12],U[13],U[14],U[15],U[11],U[7],U[3]);St(F)<this.epsilon&&(F=this.normal(U[12],U[13],U[14],U[15],U[2],U[1],U[0]),St(F)<this.epsilon&&(F=this.normal(U[0],U[4],U[8],U[12],U[11],U[7],U[3])));let z=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);St(z)<this.epsilon&&(z=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),St(z)<this.epsilon&&(z=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let H=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);St(H)<this.epsilon&&(H=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]),St(H)<this.epsilon&&(H=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12])));let X=this.normal(V[3],V[2],V[1],D,V[4],V[8],V[12]),G=this.Epsilon,W=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(U[0],U[1],U[2],U[3]));W=[W[0]-G*t[0],W[1]-G*t[1],W[2]-G*t[2]]}else W=S[12];let j=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-G*t[0],j[1]-G*t[1],j[2]-G*t[2]]}else j=U[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-G*t[0],k[1]-G*t[1],k[2]-G*t[2]]}else k=V[3];let Y=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(S[3],S[7],S[11],S[15]));Y=[Y[0]-G*t[0],Y[1]-G*t[1],Y[2]-G*t[2]]}else Y=B[0];if(f){let t=Array(4),x=Array(4),g=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(u[e]+p[e]),g[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+g[e]);let b=this.data.Vertex(W,C,t),R=this.data.Vertex(j,F,x),T=this.data.Vertex(k,z,g),y=this.data.Vertex(Y,H,w),A=this.data.Vertex(D,X,M);this.Render(S,e,b,A,y,s,W,D,Y,l,!1,!1,m,f,t,M,w),this.Render(U,b,i,R,A,W,a,j,D,l,c,!1,!1,t,u,x,M),this.Render(V,A,R,n,T,D,j,o,k,!1,c,d,!1,M,x,p,g),this.Render(B,y,A,T,r,Y,D,k,h,!1,!1,d,m,w,M,g,v)}else{let t=this.vertex(W,C),f=this.vertex(j,F),u=this.vertex(k,z),p=this.vertex(Y,H),v=this.vertex(D,X);this.Render(S,e,t,v,p,s,W,D,Y,l,!1,!1,m),this.Render(U,t,i,f,v,W,a,j,D,l,c,!1,!1),this.Render(V,v,f,n,u,D,j,o,k,!1,c,d,!1),this.Render(B,p,v,u,r,Y,D,k,h,!1,!1,d,m)}}}process3(t){if(1==V)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],n=t[9],r=this.normal(n,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],n),a=this.normal(i,t[7],t[8],n,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(n,a,l);this.Render3(t,c,d,m,e,i,n,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,s),l=this.vertex(n,a);this.Render3(t,o,h,l,e,i,n,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,n,r,s,a,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,s,a])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],x=t[4],g=t[5],w=t[6],M=t[7],b=t[8],R=t[9],T=[.5*(R[0]+g[0]),.5*(R[1]+g[1]),.5*(R[2]+g[2])],y=[.5*(R[0]+b[0]),.5*(R[1]+b[1]),.5*(R[2]+b[2])],A=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],E=[.5*(b[0]+x[0]),.5*(b[1]+x[1]),.5*(b[2]+x[2])],I=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],L=[.5*(p[0]+x[0]),.5*(p[1]+x[1]),.5*(p[2]+x[2])],N=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],O=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],_=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],P=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],S=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],U=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(T[0]+A[0]),.5*(T[1]+A[1]),.5*(T[2]+A[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],D=[.5*(A[0]+N[0]),.5*(A[1]+N[1]),.5*(A[2]+N[2])],C=[.5*E[0]+.25*(x[0]+u[0]),.5*E[1]+.25*(x[1]+u[1]),.5*E[2]+.25*(x[2]+u[2])],F=[.5*(I[0]+_[0]),.5*(I[1]+_[1]),.5*(I[2]+_[2])],z=[.5*L[0]+.25*(x[0]+M[0]),.5*L[1]+.25*(x[1]+M[1]),.5*L[2]+.25*(x[2]+M[2])],H=[.25*(g[0]+x[0])+.5*O[0],.25*(g[1]+x[1])+.5*O[1],.25*(g[2]+x[2])+.5*O[2]],X=[.5*(P[0]+S[0]),.5*(P[1]+S[1]),.5*(P[2]+S[2])],G=[.5*(S[0]+U[0]),.5*(S[1]+U[1]),.5*(S[2]+U[2])],W=[.5*(z[0]+X[0]),.5*(z[1]+X[1]),.5*(z[2]+X[2])],j=[.5*(z[0]+G[0]),.5*(z[1]+G[1]),.5*(z[2]+G[2])],k=[.5*(X[0]+G[0]),.5*(X[1]+G[1]),.5*(X[2]+G[2])],Y=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],Z=[.5*(D[0]+C[0]),.5*(D[1]+C[1]),.5*(D[2]+C[2])],Q=[.5*(V[0]+D[0]),.5*(V[1]+D[1]),.5*(V[2]+D[2])],J=[f,P,N,X,[.5*(L[0]+P[0]),.5*(L[1]+P[1]),.5*(L[2]+P[2])],D,k,W,Z,Q],tt=[k,G,j,U,[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y,w,_,F,q],et=[Q,K,V,$,[.5*(T[0]+E[0]),.5*(T[1]+E[1]),.5*(T[2]+E[2])],T,q,B,y,R],it=[q,$,Y,K,[.25*(A[0]+I[0]+S[0]+x[0]),.25*(A[1]+I[1]+S[1]+x[1]),.25*(A[2]+I[2]+S[2]+x[2])],j,Q,Z,W,k],nt=this.normal(k,j,Y,q,$,K,Q),rt=this.normal(q,$,K,Q,Z,W,k),st=this.normal(Q,Z,W,k,j,Y,q),at=this.Epsilon,ot=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!o)if(o=zt(w,M,b,R)<this.res2){let t=Pt(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-at*t[0],ot[1]-at*t[1],ot[2]-at*t[2]]}else ot=q;let ht=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])];if(!h)if(h=zt(f,p,g,R)<this.res2){let t=Pt(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-at*t[0],ht[1]-at*t[1],ht[2]-at*t[2]]}else ht=Q;let lt=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!l)if(l=zt(f,u,v,w)<this.res2){let t=Pt(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-at*t[0],lt[1]-at*t[1],lt[2]-at*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,nt,t),v=this.data.Vertex(ht,rt,f),x=this.data.Vertex(lt,st,u);this.Render3(J,e,x,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,x,i,p,lt,s,ot,o,!1,l,u,d,t),this.Render3(et,v,p,n,ht,ot,a,o,h,!1,f,t,m),this.Render3(it,p,v,x,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,nt),c=this.vertex(ht,rt),d=this.vertex(lt,st);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,n,ht,ot,a,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],n=t[12],r=t[15],s=Ht(e,n,i,r);s=Math.max(zt(e,t[4],t[8],n)),s=Math.max(s,zt(t[1],t[5],t[9],t[13])),s=Math.max(s,zt(i,t[7],t[11],r)),s=Math.max(s,zt(t[2],t[6],t[10],t[14]));let a=Ht(e,i,n,r);return a=Math.max(a,zt(e,t[1],t[2],i)),a=Math.max(a,zt(t[4],t[5],t[6],t[7])),a=Math.max(a,zt(t[8],t[9],t[10],t[11])),a=Math.max(a,zt(n,t[13],t[14],r)),[s,a]}Distance3(t){let e=t[0],i=t[4],n=t[6],r=t[9],s=St([(e[0]+n[0]+r[0])*(1/3)-i[0],(e[1]+n[1]+r[1])*(1/3)-i[1],(e[2]+n[2]+r[2])*(1/3)-i[2]]);return s=Math.max(s,zt(e,t[1],t[3],n)),s=Math.max(s,zt(e,t[2],t[5],r)),Math.max(s,zt(n,t[7],t[8],r))}differential(t,e,i,n){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return St(r)>this.epsilon?r:(r=Ct(t,e,i),St(r)>this.epsilon?r:Ft(t,e,i,n))}sumdifferential(t,e,i,n,r,s,a){let o=this.differential(t,e,i,n),h=this.differential(t,r,s,a);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,n,r,s,a){let o=3*(r[0]-n[0]),h=3*(r[1]-n[1]),l=3*(r[2]-n[2]),c=3*(i[0]-n[0]),d=3*(i[1]-n[1]),m=3*(i[2]-n[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(St(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=Ct(n,i,e),x=Ct(n,r,s),g=Vt(x,u),w=Vt(p,v);if(f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>this.epsilon)return f;let M=Ft(n,i,e,t),b=Ft(n,r,s,a);g=Vt(p,M),w=Vt(b,u);let R=Vt(x,v);return f=[g[0]+w[0]+R[0],g[1]+w[1]+R[1],g[2]+w[2]+R[2]],St(f)>this.epsilon?f:(g=Vt(b,v),w=Vt(x,M),f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>this.epsilon?f:Vt(b,M))}}function xt(t){return 0<=t&&t<=1}class gt{constructor(t,e,i){const n=1e3*Number.EPSILON,r=n*n;if(Math.abs(t)<=n*Math.abs(e)+r*Math.abs(i))Math.abs(e)>n*Math.abs(i)?(this.roots=1,this.t1=-i/e):0==i?(this.roots=1,this.t1=0):this.roots=0;else{let r=.5*e/t,s=e*r;if(Math.abs(s)<=n*Math.abs(i)){let e=-i/t;e>=0?(this.roots=2,this.t2=Math.sqrt(e),this.t1=-this.t2):this.roots=0}else{let t=-2*i/s;if(t>-1){this.roots=2;let e=r*function(t){return t/(Math.sqrt(1+t)+1)}(t),i=-e-2*r;i<=e?(this.t1=i,this.t2=e):(this.t1=e,this.t2=i)}else-1==t?(this.roots=1,this.t1=this.t2=-r):this.roots=0}}}}class wt extends ut{constructor(t,e,i,n,r){if(super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,n&&r)this.Min=n,this.Max=r;else{let t=this.Bounds(this.controlpoints);this.Min=t[0],this.Max=t[1]}}Bounds(t){let e=Array(3),i=Array(3),n=t.length,r=Array(n);for(let h=0;h<3;++h){for(let e=0;e<n;++e)r[e]=t[e][h];let l,c;if(l=c=r[0],4==n){l=Math.min(l,r[3]),c=Math.max(c,r[3]);let t=(s=r[0],a=r[1],o=r[2],[r[3]-s+3*(a-o),2*(s+o)-4*a,a-s]),e=new gt(t[0],t[1],t[2]);if(0!=e.roots&&xt(e.t1)){let t=Bt(r[0],r[1],r[2],r[3],e.t1);l=Math.min(l,t),c=Math.max(c,t)}if(2==e.roots&&xt(e.t2)){let t=Bt(r[0],r[1],r[2],r[3],e.t2);l=Math.min(l,t),c=Math.max(c,t)}}else{let t=r[1];l=Math.min(l,t),c=Math.max(c,t)}e[h]=l,i[h]=c}var s,a,o;return[[e[0],e[1],e[2]],[i[0],i[1],i[2]]]}setMaterialIndex(){this.setMaterial(Z,Te)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],n=t[2],r=t[3],s=this.normal(Dt(e,i),Ct(e,i,n)),a=this.normal(Dt(n,r),Ct(r,n,i)),o=this.data.vertex(e,s),h=this.data.vertex(r,a);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){Z.append(this.data)}notRendered(){Z.rendered=!1}Render(t,e,i){let n=t[0],r=t[1],s=t[2],a=t[3];if(zt(n,r,s,a)<this.res2)this.offscreen([n,a])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],l=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[n,o,c,m],u=[m,d,l,a],p=this.normal(function(t,e,i,n){return[i[0]+n[0]-t[0]-e[0],i[1]+n[1]-t[1]-e[1],i[2]+n[2]-t[2]-e[2]]}(n,r,s,a),function(t,e,i,n){return[3*t[0]-5*e[0]+i[0]+n[0],3*t[1]-5*e[1]+i[1]+n[1],3*t[2]-5*e[2]+i[2]+n[2]]}(n,r,s,a)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=Ut(t,t),n=Ut(t,e);return[i*e[0]-n*t[0],i*e[1]-n*t[1],i*e[2]-n*t[2]]}}class Mt extends ut{constructor(t,e,i){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=t,this.Max=t}setMaterialIndex(){this.setMaterial(K,Re)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){K.append(this.data)}notRendered(){K.rendered=!1}}class bt extends ut{constructor(t,e){super(),this.CenterIndex=t,this.MaterialIndex=e,this.Min=this.Bounds(F,Math.min),this.Max=this.Bounds(F,Math.max),this.controlpoints=F,this.Normals=z,this.Colors=H,this.Indices=X,this.transparent=c[this.MaterialIndex].diffuse[3]<1}Bounds(t,e){let i=Array(3),n=t.length,r=Array(n);for(let s=0;s<3;++s){for(let e=0;e<n;++e)r[e]=t[e][s];i[s]=pt(r,e)}return[i[0],i[1],i[2]]}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.setMaterial(et,Ee)}process(t){this.data.vertices=new Array(6*t.length),it=this.Colors.length>0?-1-it:1+it;for(let e=0,i=this.Indices.length;e<i;++e){let i=this.Indices[e],n=i[0],r=t[n[0]],s=t[n[1]],a=t[n[2]];if(!this.offscreen([r,s,a])){let t=i.length>1?i[1]:n;if(t&&0!=t.length||(t=n),this.Colors.length>0){let e=i.length>2?i[2]:n;e&&0!=e.length||(e=n);let o=this.Colors[e[0]],h=this.Colors[e[1]],l=this.Colors[e[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l)):(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[0],r,this.Normals[t[0]],o))}else 0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]])):(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[0],r,this.Normals[t[0]]))}}this.data.nvertices=t.length,this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):et.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:et.rendered=!1}}function Rt(){M=-Math.tan(.5*o.angleOfView)*o.maxBound[2],_.x=_.y=0,_.z=.5*(o.minBound[2]+o.maxBound[2]),x=v=o.zoom0,S.zmin=o.minBound[2],S.zmax=o.maxBound[2],P.x=P.y=0,Oe(),U=!0,Ne()}let Tt=0,yt=1,At=2,Et=3,It=4;function Lt(e=[]){let i=lt(t,vertex,t.VERTEX_SHADER,e),n=lt(t,fragment,t.FRAGMENT_SHADER,e),r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,n),t.bindAttribLocation(r,Tt,"position"),t.bindAttribLocation(r,yt,"normal"),t.bindAttribLocation(r,At,"materialIndex"),t.bindAttribLocation(r,Et,"color"),t.bindAttribLocation(r,It,"width"),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialize shaders"),r}class Nt{constructor(t,e,i,n){this.m0=.5*(t+e);let r=.5*(e+i);this.m2=.5*(i+n),this.m3=.5*(this.m0+r),this.m4=.5*(r+this.m2),this.m5=.5*(this.m3+this.m4)}}class Ot{constructor(t,e,i,n){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),a=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+n[0]),.5*(i[1]+n[1]),.5*(i[2]+n[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+s),.5*(this.m0[2]+a)],this.m4=[.5*(r+this.m2[0]),.5*(s+this.m2[1]),.5*(a+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}class _t{constructor(t){this.l003=t[0];let e=t[1],i=t[2],n=t[3],r=t[4],s=t[5];this.r300=t[6];let a=t[7],o=t[8];this.u030=t[9],this.u021=.5*(this.u030+s),this.u120=.5*(this.u030+o);let h=.5*(s+i),l=.5*(o+r),c=.5*(o+a),d=.5*(i+r);this.l012=.5*(i+this.l003);let m=.5*(r+n);this.r210=.5*(a+this.r300),this.l102=.5*(this.l003+e);let f=.5*(e+n);this.r201=.5*(n+this.r300),this.u012=.5*(this.u021+h),this.u210=.5*(this.u120+c),this.l021=.5*(h+this.l012);let u=.5*l+.25*(r+e);this.r120=.5*(c+this.r210);let p=.5*d+.25*(r+a),v=.25*(s+r)+.5*m;this.l201=.5*(this.l102+f),this.r102=.5*(f+this.r201),this.l210=.5*(p+this.l201),this.r012=.5*(p+this.r102),this.l300=.5*(this.l201+this.r102),this.r021=.5*(v+this.r120),this.u201=.5*(this.u210+v),this.r030=.5*(this.u210+this.r120),this.u102=.5*(this.u012+u),this.l120=.5*(this.l021+u),this.l030=.5*(this.u012+this.l021),this.l111=.5*(d+this.l102),this.r111=.5*(m+this.r210),this.u111=.5*(this.u021+l),this.c111=.25*(h+c+f+r)}}function Pt(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function St(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function Ut(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Vt(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Bt(t,e,i,n,r){let s=1-r,a=s*s;return a*s*t+r*(3*(a*e+r*s*i)+r*r*n)}function Dt(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ct(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function Ft(t,e,i,n){return[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])]}function zt(t,e,i,n){let r=[1/3*(n[0]-t[0]),1/3*(n[1]-t[1]),1/3*(n[2]-t[2])];return Math.max(St([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),St([n[0]-r[0]-i[0],n[1]-r[1]-i[1],n[2]-r[2]-i[2]]))}function Ht(t,e,i,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],s=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Math.max(St(Vt(r,Pt(s))),St(Vt(s,Pt(r))))/9}function Xt(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Gt(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Wt(t){ae||oe(),B=!0,D=t.clientX,C=t.clientY}let jt,kt,Yt=!1;function $t(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function qt(t){t.preventDefault(),ae||oe();let e=t.targetTouches;ue=pe=Yt=!1,fe||(1!=e.length||B||(kt=(new Date).getTime(),touchId=e[0].identifier,D=e[0].pageX,C=e[0].pageY),2!=e.length||B||(touchId=e[0].identifier,jt=$t(e),Yt=!0))}function Kt(t){B=!1}function Zt(t,e,i,n,r){if(t==i&&e==n)return;let[s,a]=function(t,e){let i=ne(t),n=ne(e),r=Ut(i,n);return[r>1?0:r<-1?f:Math.acos(r),Pt(Vt(i,n))]}([t,-e],[i,-n]);mat4.fromRotation(O,2*r*R*s/v,a),mat4.multiply(T,O,T)}function Qt(t,e,i,n){let r=1/v;P.x+=(i-t)*r*s,P.y-=(n-e)*r*a}function Jt(t,e,i,n){o.orthographic?Qt(t,e,i,n):(_.x+=(i-t)*(S.xmax-S.xmin),_.y-=(n-e)*(S.ymax-S.ymin))}function te(){var t,e;t=A,e=T,mat4.fromTranslation(O,[_.x,_.y,_.z]),mat4.invert(N,O),mat4.multiply(t,e,N),mat4.multiply(t,O,t),mat4.translate(A,A,[_.x,_.y,0]),mat3.fromMat4(L,A),mat3.invert(I,L),mat4.multiply(E,y,A)}function ee(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;v<=e&&(v=e),v>=t&&(v=t),(1.5*v<x||v>1.5*x)&&(U=!0,x=v)}function ie(t){let e=o.zoomStep*a*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(o.zoomFactor);Math.abs(e)<i&&(v*=o.zoomFactor**e,ee())}function ne(t){let e=t[0],i=t[1],n=Math.hypot(e,i);return n>1&&(denom=1/n,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function re(t,e,i,n){ie(e-n)}function se(t,e,i,n=1){let r;switch(i){case 1:r=Zt;break;case 2:r=Qt;break;case 3:r=re;break;case 4:r=Jt;break;default:r=(t,e,i,n)=>{}}r((D-s)/s,(C-a)/a,(t-s)/s,(e-a)/a,n),D=t,C=e,Oe(),Ne()}let ae=0;function oe(){ae=1,o.canvas.addEventListener("wheel",de,!1)}function he(){let t,e,i;[t,e,i]=function(){let t=Array(3),e=Array(3),i=Array(3),n=_.x,r=_.y,s=.5*(S.zmin+S.zmax);for(let a=0;a<3;++a){let h=0,l=0,c=0,d=4*a;for(let t=0;t<4;++t){let e=4*t,i=T[e],a=T[e+1],m=T[e+2],f=T[e+3],u=o.Transform[d+t];h+=u*(f-n*i-r*a-s*m),c+=u*a,l+=u*(f-n*i-r*a)}t[a]=h,e[a]=c,i[a]=l}return[t,e,i]}();let n=o.orthographic?" orthographic(":" perspective(",r="".padStart(n.length),s="currentprojection=\n"+n+"camera=("+t+"),\n"+r+"up=("+e+"),\n"+r+"target=("+i+"),\n"+r+"zoom="+v*o.initialZoom/o.zoom0;return o.orthographic||(s+=",\n"+r+"angle="+2*Math.atan(Math.tan(.5*o.angleOfView)/v)/u),0==g&&0==w||(s+=",\n"+r+"viewportshift=("+g+","+w+")"),o.orthographic||(s+=",\n"+r+"autoadjust=false"),s+=");\n",window.parent.asyProjection=!0,s}function le(t){if(ae||oe(),o.embedded&&ae&&27==t.keyCode)return ae=0,void o.canvas.removeEventListener("wheel",de,!1);let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":mat4.identity(T),Rt(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1;break;case"m":++V,3==V&&(V=0),2!=V&&(o.embedded||st(),rt(o.ibl)),U=!0,Ne();break;case"+":case"=":case">":v*=o.zoomFactor,ce();break;case"-":case"_":case"<":v/=o.zoomFactor,ce();break;case"c":window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",he())}e.length>0&&(mat4.rotate(T,T,.1,e),te(),Ne())}function ce(){ee(),Oe(),Ne()}function de(t){t.preventDefault(),t.deltaY<0?v*=o.zoomFactor:v/=o.zoomFactor,ce()}function me(t){if(!B)return;let e,i=t.clientX,n=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,se(i,n,e)}let fe=!1,ue=!1,pe=!1;function ve(t){if(t.preventDefault(),fe)return;let e=t.targetTouches;if(!Yt&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,n=t-D,r=i-C,s=n*n+r*r<=o.shiftHoldDistance*o.shiftHoldDistance;if(s&&!ue&&!pe&&(new Date).getTime()-kt>o.shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(o.vibrateTime),ue=!0),ue)se(t,i,2);else if(!s){pe=!0,se(e[0].pageX,e[0].pageY,1,.5)}}if(Yt&&!ue&&2==e.length&&touchId==e[0].identifier){let t=$t(e),i=t-jt;fe=!0,i*=o.zoomPinchFactor,i>o.zoomPinchCap&&(i=o.zoomPinchCap),i<-o.zoomPinchCap&&(i=-o.zoomPinchCap),ie(i/b),jt=t,ue=pe=fe=!1,Oe(),Ne()}}let xe,ge,we,Me,be=[];function Re(){dt(K,xe),K.clear()}function Te(){dt(Z,ge),Z.clear()}function ye(){dt(Q,ge),Q.clear()}function Ae(){dt(J,we),J.clear()}function Ee(){dt(et,Me),et.rendered=!1,et.clear()}function Ie(){let e=tt.indices;if(V>0)return dt(tt,Me,e),void tt.clear();if(e.length>0){!function(t){let e=A[2],i=A[6],n=A[10];be.length=t.length;for(let r=0;r<t.length;++r){let s=6*r;be[r]=e*t[s]+i*t[s+1]+n*t[s+2]}}(tt.vertices);let i=e.length/3,n=Array(i).fill().map((t,e)=>e);n.sort((function(t,i){let n=3*t;Ia=e[n],Ib=e[n+1],Ic=e[n+2];let r=3*i;return IA=e[r],IB=e[r+1],IC=e[r+2],be[Ia]+be[Ib]+be[Ic]<be[IA]+be[IB]+be[IC]?-1:1}));let r=Array(e.length);for(let t=0;t<i;++t){let i=3*n[t];r[3*t]=e[i],r[3*t+1]=e[i+1],r[3*t+2]=e[i+2]}t.depthMask(!1),dt(tt,Me,r),tt.rendered=!1,t.depthMask(!0)}tt.clear()}function Le(){Re(),Te(),ye(),Ae(),Ee(),Ie(),requestAnimationFrame(Le)}function Ne(){o.embedded&&(i.width=o.canvasWidth,i.height=o.canvasHeight,_e()),t.clearColor(o.background[0],o.background[1],o.background[2],o.background[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT);for(const t of h)t.render();Le(),o.embedded&&(n.clearRect(0,0,o.canvasWidth,o.canvasHeight),n.drawImage(i,0,0)),0==V&&(U=!1)}function Oe(){!function(t,e,i,n){let r=t/e;g=(i/t+o.viewportShift[0])*v,w=(n/e+o.viewportShift[1])*v;let s=1/v;if(o.orthographic){let t=o.maxBound[0]-o.minBound[0],e=o.maxBound[1]-o.minBound[1];if(t<e*r){let t=.5*e*r*s,i=2*t*g,n=e*s*w;S.xmin=-t-i,S.xmax=t-i,S.ymin=o.minBound[1]*s-n,S.ymax=o.maxBound[1]*s-n}else{let e=.5*t*s/r,i=t*s*g,n=2*e*w;S.xmin=o.minBound[0]*s-i,S.xmax=o.maxBound[0]*s-i,S.ymin=-e-n,S.ymax=e-n}}else{let t=M*s,e=t*r,i=2*e*g,n=2*t*w;S.xmin=-e-i,S.xmax=e-i,S.ymin=-t-n,S.ymax=t-n}}(o.canvasWidth,o.canvasHeight,P.x,P.y),(o.orthographic?mat4.ortho:mat4.frustum)(y,S.xmin,S.xmax,S.ymin,S.ymax,-S.zmax,-S.zmin),te(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(he())}function _e(){t.viewportWidth=o.canvasWidth,t.viewportHeight=o.canvasHeight,t.viewport(.5*(o.canvas.width-o.canvasWidth),.5*(o.canvas.height-o.canvasHeight),o.canvasWidth,o.canvasHeight),t.scissor(0,0,o.canvas.width,o.canvas.height)}function Pe(t,e){t>void 0&&(t=void 0),e>void 0&&(e=void 0),P.x*=t/o.canvasWidth,P.y*=e/o.canvasHeight,o.canvasWidth=t,o.canvasHeight=e,o.embedded&&(o.canvas.width=i.width=o.canvasWidth,o.canvas.height=i.height=o.canvasHeight),b=Math.hypot(o.canvasWidth,o.canvasHeight),s=.5*o.canvas.width,a=.5*o.canvas.height,R=1+8*Math.hypot(o.viewportMargin[0],o.viewportMargin[1])/b,_e(),Oe(),U=!0}function Se(){if(o.zoom0=o.initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),o.absolute&&!o.embedded)o.canvasWidth=o.canvasWith0*window.devicePixelRatio,o.canvasHeight=o.canvasHeight0*window.devicePixelRatio;else{let t=o.canvasWith0/o.canvasHeight0;o.canvasWidth=Math.max(window.innerWidth-10,10),o.canvasHeight=Math.max(window.innerHeight-10,10),!o.orthographic&&!window.parent.asyProjection&&o.canvasWidth<o.canvasHeight*t&&(o.zoom0*=o.canvasWidth/(o.canvasHeight*t))}o.canvas.width=o.canvasWidth,o.canvas.height=o.canvasHeight;window.innerWidth,window.innerHeight;let t=1/o.zoom0;o.viewportShift[0]*=t,o.viewportShift[1]*=t,Pe(o.canvasWidth,o.canvasHeight),Rt()}class Ue{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],n=t[2],r=e*this.ct+n*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+n*this.ct+this.center[2]]}}function Ve(t,e,i){let n=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[Xt(n),Gt(n)]}let Be=4/3*(Math.sqrt(2)-1);async function De(t){return(await fetch(t)).arrayBuffer()}function Ce(t){return t.getBytes().filter((t,e)=>e%4!=3)}function Fe(e,i,n=t.RGB16F){let r=e.width(),s=e.height(),a=t.createTexture();return t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,a),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,n,r,s,0,t.RGB,t.FLOAT,Ce(e)),a}window.webGLStart=function(){o.canvas=document.getElementById("Asymptote"),o.embedded=window.top.document!=document,ht(),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.DEPTH_TEST),t.enable(t.SCISSOR_TEST),o.canvas.onmousedown=Wt,document.onmouseup=Kt,document.onmousemove=me,o.canvas.onkeydown=le,o.embedded||oe(),o.canvas.addEventListener("touchstart",qt,!1),o.canvas.addEventListener("touchend",Kt,!1),o.canvas.addEventListener("touchcancel",Kt,!1),o.canvas.addEventListener("touchleave",Kt,!1),o.canvas.addEventListener("touchmove",ve,!1),document.addEventListener("keydown",le,!1),o.canvasWith0=o.canvasWidth,o.canvasHeight0=o.canvasHeight,mat4.identity(T),0!=window.innerWidth&&0!=window.innerHeight&&Se(),window.addEventListener("resize",Se,!1),o.ibl&&async function(){let e=o.imageURL+o.image+"/";function i(t){return new Promise(e=>setTimeout(e,t))}for(;!Module.EXRLoader;)await i(0);promises=[De(o.imageURL+"refl.exr").then(t=>{let e=new Module.EXRLoader(t);j=Fe(e,0)}),De(e+"diffuse.exr").then(t=>{let e=new Module.EXRLoader(t);W=Fe(e,1)})],refl_promise=[],refl_promise.push(De(e+"refl0.exr"));for(let t=1;t<=8;++t)refl_promise.push(De(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let i=t.createTexture();t.activeTexture(t.TEXTURE0+2),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAX_LEVEL,e.length-1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MIN_LOD,0),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MAX_LOD,8);for(let i=0;i<e.length;++i){let n=new Module.EXRLoader(e[i]);t.texImage2D(t.TEXTURE_2D,i,t.RGB16F,n.width(),n.height(),0,t.RGB,t.FLOAT,Ce(n))}G=i}),promises.push(finished_promise),await Promise.all(promises)}().then(k).then(Rt)},window.light=function(t,e){l.push(new nt(t,e))},window.material=function(t,e,i,n,r,s){c.push(new Y(t,e,i,n,r,s))},window.patch=function(t,e,i,n){h.push(new vt(t,e,i,n))},window.curve=function(t,e,i){h.push(new wt(t,e,i))},window.pixel=function(t,e,i){h.push(new Mt(t,e,i))},window.triangles=function(t,e){h.push(new bt(t,e)),window.Positions=F=[],window.Normals=z=[],window.Colors=H=[],window.Indices=X=[]},window.sphere=function(t,e,i,n,r){let s,a,o,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,x=.0549670512339254,g=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,Be,0],[1,Be,m],[f,Be*f,u],[p,Be*p,v],[Be,1,0],[Be,1,m],[Be*f,f,u],[Be*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,Be*p,v],[x,0,g],[Be*p,p,v],[w,w,1],[.05*Be,0,1],[0,p,v],[0,x,g],[0,.05*Be,1],[0,0,1]]],b=new Ue(t,r);function R(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let n=t[i];e[i]=c([s*n[0],a*n[1],o*n[2]])}return e}r?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let T=Ve(c,[-e,-e,d],[e,e,e]),y=T[0],A=T[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){a=t*e;for(let t=l;t<=1;t+=2){o=t*e;for(let t=0;t<2;++t)h.push(new vt(R(M[t]),i,n,null,y,A))}}}},window.disk=function(t,e,i,n,r){let s=1-2*Be/3,a=[[1,0,0],[1,-Be,0],[Be,-1,0],[0,-1,0],[1,Be,0],[s,0,0],[0,-s,0],[-Be,-1,0],[Be,1,0],[0,s,0],[-s,0,0],[-1,-Be,0],[0,1,0],[-Be,1,0],[-1,Be,0],[-1,0,0]],o=new Ue(t,r),l=Ve(o.T.bind(o),[-e,-e,0],[e,e,0]);h.push(new vt(function(t){let i=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];i[n]=o.T([e*r[0],e*r[1],0])}return i}(a),i,n,null,l[0],l[1]))},window.cylinder=function(t,e,i,n,r,s,a){let o,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,Be,0],[1,Be,1/3],[1,Be,2/3],[1,Be,1],[Be,1,0],[Be,1,1/3],[Be,1,2/3],[Be,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Ue(t,s);function m(t){let e=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];e[n]=d.T([o*r[0],l*r[1],i*r[2]])}return e}let f=Ve(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){o=t*e;for(let t=-1;t<=1;t+=2)l=t*e,h.push(new vt(m(c),n,r,null,u,p))}if(a){let e=d.T([0,0,i]);h.push(new wt([t,e],n,r,t,e))}},window.tube=function(t,e,i,n,r){let s=function(t,e,i,n,r){class s{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=Vt(i,e)}}let a=Number.EPSILON*Math.max(St(t),St(e),St(i),St(n));function o(r){if(1==r){let r=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return St(r)>a?Pt(r):(r=[2*i[0]-e[0]-n[0],2*i[1]-e[1]-n[1],2*i[2]-e[2]-n[2]],St(r)>a?Pt(r):[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])}let s=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[s[0]*l+o[0]*r+h[0],s[1]*l+o[1]*r+h[1],s[2]*l+o[2]*r+h[2]];return St(c)>a?Pt(c):(l=2*r,c=[s[0]*l+o[0],s[1]*l+o[1],s[2]*l+o[2]],St(c)>a?Pt(c):Pt(s))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];St(l)<a&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],St(l)<a&&(l=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])),l=Pt(l);let c=function(t){let e=Vt(t,[0,1,0]),i=Number.EPSILON*St(t);return St(e)>i?Pt(e):(e=Vt(t,[0,0,1]),St(e)>i?Pt(e):[1,0,0])}(l);h[0]=new s(t,c,l);for(let a=1;a<r.length;++a){let l=h[a-1],c=r[a],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*n[0],f*t[1]+m*e[1]+d*i[1]+p*n[1],f*t[2]+m*e[2]+d*i[2]+p*n[2]],x=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=x[0]||0!=x[1]||0!=x[2]){let t=l.r,e=Pt(x),i=l.t,n=Ut(e,i),r=[i[0]-2*n*e[0],i[1]-2*n*e[1],i[2]-2*n*e[2]];i=o(c);let d=2*Ut(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=Pt([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*Ut(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[a]=new s(v,Pt(m),Pt(i))}else h[a]=h[a-1]}return h}(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),a=Be*e,o=[[e,0],[e,a],[a,e],[0,e]];function l(e,r,a,l){let c=Array(16);for(let i=0;i<4;++i){let n=s[i],h=n.r[0],d=n.s[0],m=h*e+d*r,f=h*a+d*l;h=n.r[1],d=n.s[1];let u=h*e+d*r,p=h*a+d*l;h=n.r[2],d=n.s[2];let v=h*e+d*r,x=h*a+d*l,g=t[i],w=g[0];w1=g[1],w2=g[2];for(let t=0;t<4;++t){let e=o[t],n=e[0],r=e[1];c[4*i+t]=[m*n+f*r+w,u*n+p*r+w1,v*n+x*r+w2]}}h.push(new vt(c,i,n))}l(1,0,0,1),l(0,-1,1,0),l(-1,0,0,-1),l(0,1,-1,0),r&&h.push(new wt(t,i,n))},window.Positions=F,window.Normals=z,window.Colors=H,window.Indices=X}();
+let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n vec4 v=vec4(position,1.0);\n gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n ViewPosition=(viewMat*v).xyz;\n#endif\n Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n MaterialIndex=int(materialIndex);\n#ifdef COLOR\n Color=color;\n#endif\n#else\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[int(abs(materialIndex))-1];\n emissive=m.emissive;\n if(materialIndex >= 0.0)\n diffuse=m.diffuse;\n else {\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n }\n#else\n m=Materials[int(materialIndex)];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int MaterialIndex;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n vec3 direction;\n vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n float x=cart.x;\n float y=cart.z;\n float z=cart.y;\n\n float r=length(cart);\n float theta=r > 0.0 ? acos(z/r) : 0.0;\n float phi=atan(y,x);\n\n return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n vec3 sphericalVec=cart2sphere(cartVec);\n sphericalVec.y=sphericalVec.y*piInv;\n sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n vec3 reflectVec=normalize(reflect(-viewDir,normal));\n vec2 reflCoord=normalizedAngle(reflectVec);\n vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n vec3 metal=diffuse.rgb*IBLRefl;\n return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n float ndoth=max(dot(normal,h),0.0);\n float alpha2=Roughness2*Roughness2;\n float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n float ndotv=max(dot(v,normal),0.0);\n float ap=1.0+Roughness2;\n float k=0.125*ap*ap;\n return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n float a=1.0-max(dot(h,v),0.0);\n float b=a*a;\n return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n vec3 lambertian=diffuse.rgb;\n vec3 h=normalize(lightDirection+viewDirection);\n\n float omegain=max(dot(viewDirection,normal),0.0);\n float omegaln=max(dot(lightDirection,normal),0.0);\n\n float D=NDF_TRG(h);\n float G=Geom(viewDirection,lightDirection);\n float F=Fresnel(h,viewDirection,fresnel0);\n\n float denom=4.0*omegain*omegaln;\n float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n vec3 metal=rawReflectance*diffuse.rgb;\n\n return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[abs(MaterialIndex)-1];\n emissive=m.emissive;\n if(MaterialIndex >= 0)\n diffuse=m.diffuse;\n else {\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n }\n#else\n m=Materials[MaterialIndex];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n normal=normalize(Normal);\n normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n color=IBLColor(viewDir);\n#else\n Roughness2=roughness*roughness;\n color=emissive.rgb;\n for(int i=0; i < nlights; ++i) {\n Light Li=Lights[i];\n vec3 L=Li.direction;\n float cosTheta=max(dot(normal,L),0.0);\n vec3 radiance=cosTheta*Li.color;\n color += BRDF(viewDir,L)*radiance;\n }\n#endif\n OUTVALUE=vec4(color,diffuse.a);\n#else\n OUTVALUE=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=n*Math.max(1,Math.abs(t),Math.abs(e))};var n=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var n=s(i(2)),r=s(i(3));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=n,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*a-o*l,m=-c*s+o*h,f=l*s-a*h,u=i*d+n*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*n+r*l)*u,t[2]=(o*n-r*a)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*s)*u,t[6]=f*u,t[7]=(-l*i+n*h)*u,t[8]=(a*i-n*s)*u,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],x=e[15],g=i*o-n*a,w=i*h-r*a,M=i*l-s*a,b=n*h-r*o,R=n*l-s*o,T=r*l-s*h,y=c*p-d*u,A=c*v-m*u,E=c*x-f*u,I=d*v-m*p,L=d*x-f*p,N=m*x-f*v,O=g*N-w*L+M*I+b*E-R*A+T*y;if(!O)return null;return O=1/O,t[0]=(o*N-h*L+l*I)*O,t[1]=(r*L-n*N-s*I)*O,t[2]=(p*T-v*R+x*b)*O,t[3]=(m*R-d*T-f*b)*O,t[4]=(h*E-a*N-l*A)*O,t[5]=(i*N-r*E+s*A)*O,t[6]=(v*M-u*T-x*w)*O,t[7]=(c*T-m*M+f*w)*O,t[8]=(a*L-o*E+l*y)*O,t[9]=(n*E-i*L-s*y)*O,t[10]=(u*R-p*M+x*g)*O,t[11]=(d*M-c*R-f*g)*O,t[12]=(o*A-a*I-h*y)*O,t[13]=(i*I-n*A+r*y)*O,t[14]=(p*w-u*b-v*g)*O,t[15]=(c*b-d*w+m*g)*O,t},e.multiply=r,e.translate=function(t,e,i){var n=i[0],r=i[1],s=i[2],a=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,x=void 0;e===t?(t[12]=e[0]*n+e[4]*r+e[8]*s+e[12],t[13]=e[1]*n+e[5]*r+e[9]*s+e[13],t[14]=e[2]*n+e[6]*r+e[10]*s+e[14],t[15]=e[3]*n+e[7]*r+e[11]*s+e[15]):(a=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=x,t[12]=a*n+c*r+u*s+e[12],t[13]=o*n+d*r+p*s+e[13],t[14]=h*n+m*r+v*s+e[14],t[15]=l*n+f*r+x*s+e[15]);return t},e.rotate=function(t,e,i,r){var s,a,o,h,l,c,d,m,f,u,p,v,x,g,w,M,b,R,T,y,A,E,I,L,N=r[0],O=r[1],_=r[2],P=Math.sqrt(N*N+O*O+_*_);if(Math.abs(P)<n.EPSILON)return null;N*=P=1/P,O*=P,_*=P,s=Math.sin(i),a=Math.cos(i),o=1-a,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],x=e[9],g=e[10],w=e[11],M=N*N*o+a,b=O*N*o+_*s,R=_*N*o-O*s,T=N*O*o-_*s,y=O*O*o+a,A=_*O*o+N*s,E=N*_*o+O*s,I=O*_*o-N*s,L=_*_*o+a,t[0]=h*M+m*b+v*R,t[1]=l*M+f*b+x*R,t[2]=c*M+u*b+g*R,t[3]=d*M+p*b+w*R,t[4]=h*T+m*y+v*A,t[5]=l*T+f*y+x*A,t[6]=c*T+u*y+g*A,t[7]=d*T+p*y+w*A,t[8]=h*E+m*I+v*L,t[9]=l*E+f*I+x*L,t[10]=c*E+u*I+g*L,t[11]=d*E+p*I+w*L,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,s,a,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<n.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),s=Math.cos(e),a=1-s,t[0]=o*o*a+s,t[1]=h*o*a+l*r,t[2]=l*o*a-h*r,t[3]=0,t[4]=o*h*a-l*r,t[5]=h*h*a+s,t[6]=l*h*a+o*r,t[7]=0,t[8]=o*l*a+h*r,t[9]=h*l*a-o*r,t[10]=l*l*a+s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,n,r,s,a){var o=1/(i-e),h=1/(r-n),l=1/(s-a);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+n)*h,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,n,r,s,a){var o=1/(e-i),h=1/(n-r),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+n)*h,t[14]=(a+s)*l,t[15]=1,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var n=e[0],r=e[1],s=e[2],a=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],x=e[14],g=e[15],w=i[0],M=i[1],b=i[2],R=i[3];return t[0]=w*n+M*o+b*d+R*p,t[1]=w*r+M*h+b*m+R*v,t[2]=w*s+M*l+b*f+R*x,t[3]=w*a+M*c+b*u+R*g,w=i[4],M=i[5],b=i[6],R=i[7],t[4]=w*n+M*o+b*d+R*p,t[5]=w*r+M*h+b*m+R*v,t[6]=w*s+M*l+b*f+R*x,t[7]=w*a+M*c+b*u+R*g,w=i[8],M=i[9],b=i[10],R=i[11],t[8]=w*n+M*o+b*d+R*p,t[9]=w*r+M*h+b*m+R*v,t[10]=w*s+M*l+b*f+R*x,t[11]=w*a+M*c+b*u+R*g,w=i[12],M=i[13],b=i[14],R=i[15],t[12]=w*n+M*o+b*d+R*p,t[13]=w*r+M*h+b*m+R*v,t[14]=w*s+M*l+b*f+R*x,t[15]=w*a+M*c+b*u+R*g,t}}])})),function(){document.asy={canvasWidth:0,canvasHeight:0,absolute:!1,minBound:[0,0,0],maxBound:[0,0,0],orthographic:!1,angleOfView:0,initialZoom:0,viewportShift:[0,0],viewportMargin:[0,0],background:[],zoomFactor:0,zoomPinchFactor:0,zoomPinchCap:0,zoomStep:0,shiftHoldDistance:0,shiftWaitTime:0,vibrateTime:0,ibl:!1,webgl2:!1,imageURL:"",image:"",Transform:[],Centers:[]};let t,e,i,n,r,s,a,o=document.asy,h=[],l=[],c=[],d=0,m=2;const f=Math.acos(-1),u=f/180,p=Math.ceil(1-Math.log2(Number.EPSILON));let v,x,g,w,M,b,R,T=mat4.create(),y=mat4.create(),A=mat4.create(),E=mat4.create(),I=mat3.create(),L=mat3.create(),N=mat4.create(),O=mat4.create(),_={x:0,y:0,z:0},P={x:0,y:0},S={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},U=!0,V=0,B=!1,C=null,D=null,F=[],z=[],H=[],X=[],G=null,W=null,j=null;function k(){o.embedded||st(),rt(o.ibl)}class Y{constructor(t,e,i,n,r,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=n,this.metallic=r,this.fresnel0=s}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Materials["+i+"]."+n);t.uniform4fv(n("diffuse"),new Float32Array(this.diffuse)),t.uniform4fv(n("emissive"),new Float32Array(this.emissive)),t.uniform4fv(n("specular"),new Float32Array(this.specular)),t.uniform4f(n("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let $,q,K,Z,Q,J,tt,et,it;class nt{constructor(t,e){this.direction=t,this.color=e}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Lights["+i+"]."+n);t.uniform3fv(n("direction"),new Float32Array(this.direction)),t.uniform3fv(n("color"),new Float32Array(this.color))}}function rt(e=!1){let i=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS);r=Math.floor((i-14)/4),m=Math.min(Math.max(m,c.length),r),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),ge=Nt(pixelOpt),we=Nt(materialOpt),Me=Nt(colorOpt),be=Nt(transparentOpt)}function st(){t.deleteProgram(be),t.deleteProgram(Me),t.deleteProgram(we),t.deleteProgram(ge)}function at(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];i.gl=t,i.nlights=l.length,i.Nmaterials=m,i.maxMaterials=r,i.pixelShader=ge,i.materialShader=we,i.colorShader=Me,i.transparentShader=be}function ot(t,e){let i;return o.webgl2&&(i=t.getContext("webgl2",{alpha:e}),o.embedded&&!i)?(o.webgl2=!1,o.ibl=!1,ht(!1),null):(i||(o.webgl2=!1,o.ibl=!1,i=t.getContext("webgl",{alpha:e})),i||alert("Could not initialize WebGL"),i)}function ht(s=!0){if(o.ibl&&(o.webgl2=!0),e=o.background[3]<1,o.embedded){let a=window.top.document;if(s&&(n=o.canvas.getContext("2d")),i=o.webgl2?a.offscreen2:a.offscreen,i||(i=a.createElement("canvas"),o.webgl2?a.offscreen2=i:a.offscreen=i),o.webgl2?a.asygl2||(a.asygl2=Array(2)):a.asygl||(a.asygl=Array(2)),asygl=o.webgl2?a.asygl2:a.asygl,asygl[e]&&asygl[e].gl)!function(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];t=i.gl,d=i.nlights,m=i.Nmaterials,r=i.maxMaterials,ge=i.pixelShader,we=i.materialShader,Me=i.colorShader,be=i.transparentShader}(),(l.length!=d||Math.min(c.length,r)>m)&&(rt(),at());else{if(rc=ot(i,e),!rc)return;t=rc,rt(),o.webgl2?a.asygl2[e]={}:a.asygl[e]={},at()}}else t=ot(o.canvas,e),rt();$=t.getExtension("OES_element_index_uint"),q=t.TRIANGLES,K=new mt(t.POINTS),Z=new mt(t.LINES),Q=new mt,J=new mt,tt=new mt,et=new mt}function lt(t,e,i,n=[]){let r=o.webgl2?"300 es":"100",s=Array(...n),a=[["nlights",0==V?l.length:0],["Nmaterials",m]],h=[["int","Nlights",Math.max(l.length,1)]];o.webgl2&&s.push("WEBGL2"),o.ibl&&a.push(["ROUGHNESS_STEP_COUNT",8..toFixed(2)]),o.orthographic&&s.push("ORTHOGRAPHIC"),macros_str=a.map(t=>`#define ${t[0]} ${t[1]}`).join("\n"),define_str=s.map(t=>"#define "+t).join("\n"),const_str=h.map(t=>`const ${t[0]} ${t[1]}=${t[2]};`).join("\n"),ext_str=[].map(t=>`#extension ${t}: enable`).join("\n"),shaderSrc=`#version ${r}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n \n${e}\n `;let c=t.createShader(i);return t.shaderSource(c,shaderSrc),t.compileShader(c),t.getShaderParameter(c,t.COMPILE_STATUS)?c:(alert(t.getShaderInfoLog(c)),null)}function ct(e,i,n,r=t.ARRAY_BUFFER){return e.length>0&&(0==i&&(i=t.createBuffer(),n=!0),t.bindBuffer(r,i),n&&t.bufferData(r,e,t.STATIC_DRAW)),i}function dt(e,i,n=e.indices){if(0==e.indices.length)return;let r=i!=ge;!function(e,i){let n=i==ge;t.useProgram(i),t.enableVertexAttribArray(yt),n&&t.enableVertexAttribArray(Lt);let r=!n&&l.length>0;r&&t.enableVertexAttribArray(At);t.enableVertexAttribArray(Et),i.projViewMatUniform=t.getUniformLocation(i,"projViewMat"),i.viewMatUniform=t.getUniformLocation(i,"viewMat"),i.normMatUniform=t.getUniformLocation(i,"normMat"),(i==Me||i==be)&&t.enableVertexAttribArray(It);if(r)for(let t=0;t<l.length;++t)l[t].setUniform(i,t);for(let t=0;t<e.materials.length;++t)e.materials[t].setUniform(i,t);t.uniformMatrix4fv(i.projViewMatUniform,!1,E),t.uniformMatrix4fv(i.viewMatUniform,!1,A),t.uniformMatrix3fv(i.normMatUniform,!1,I)}(e,i),null!=W&&(t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,j),t.uniform1i(t.getUniformLocation(i,"reflBRDFSampler"),0),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,W),t.uniform1i(t.getUniformLocation(i,"diffuseSampler"),1),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,G),t.uniform1i(t.getUniformLocation(i,"reflImgSampler"),2));let s=U||e.partial||!e.rendered;e.verticesBuffer=ct(new Float32Array(e.vertices),e.verticesBuffer,s),t.vertexAttribPointer(yt,3,t.FLOAT,!1,r?24:16,0),r?l.length>0&&t.vertexAttribPointer(At,3,t.FLOAT,!1,24,12):t.vertexAttribPointer(Lt,1,t.FLOAT,!1,16,12),e.materialsBuffer=ct(new Int16Array(e.materialIndices),e.materialsBuffer,s),t.vertexAttribPointer(Et,1,t.SHORT,!1,2,0),i!=Me&&i!=be||(e.colorsBuffer=ct(new Float32Array(e.colors),e.colorsBuffer,s),t.vertexAttribPointer(It,4,t.FLOAT,!0,0,0)),e.indicesBuffer=ct($?new Uint32Array(n):new Uint16Array(n),e.indicesBuffer,s,t.ELEMENT_ARRAY_BUFFER),e.rendered=!0,t.drawElements(r?V?t.LINES:e.type:t.POINTS,n.length,$?t.UNSIGNED_INT:t.UNSIGNED_SHORT,0)}class mt{constructor(t){this.type=t||q,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(it),this.nvertices++}iVertex(t,e,i,n,r=[0,0,0,0]){let s=6*t;this.vertices[s]=e[0],this.vertices[s+1]=e[1],this.vertices[s+2]=e[2],this.vertices[s+3]=i[0],this.vertices[s+4]=i[1],this.vertices[s+5]=i[2],this.materialIndices[t]=it;let a=4*t;this.colors[a]=r[0],this.colors[a+1]=r[1],this.colors[a+2]=r[2],this.colors[a+3]=r[3],n&&this.indices.push(t)}append(t){ft(this.vertices,t.vertices),ft(this.materialIndices,t.materialIndices),ft(this.colors,t.colors),function(t,e,i){let n=t.length,r=e.length;t.length+=e.length;for(let s=0;s<r;++s)t[n+s]=e[s]+i}(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function ft(t,e){let i=t.length,n=e.length;t.length+=n;for(let r=0;r<n;++r)t[i+r]=e[r]}class ut{constructor(){this.data=new mt,this.Onscreen=!1,this.m=[]}offscreen(t){let e=E,i=t[0],n=i[0],r=i[1],s=i[2],a=1/(e[3]*n+e[7]*r+e[11]*s+e[15]);this.x=this.X=(e[0]*n+e[4]*r+e[8]*s+e[12])*a,this.y=this.Y=(e[1]*n+e[5]*r+e[9]*s+e[13])*a;for(let i=1,n=t.length;i<n;++i){let n=t[i],r=n[0],s=n[1],a=n[2],o=1/(e[3]*r+e[7]*s+e[11]*a+e[15]),h=(e[0]*r+e[4]*s+e[8]*a+e[12])*o,l=(e[1]*r+e[5]*s+e[9]*a+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],n=this.c[2],r=t[0]-e,s=t[1]-i,a=t[2]-n;return[r*I[0]+s*I[3]+a*I[6]+e,r*I[1]+s*I[4]+a*I[7]+i,r*I[2]+s*I[5]+a*I[8]+n]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=m&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(c[this.MaterialIndex])),it=t.materialTable[this.MaterialIndex]}render(){let t;var e,i;if(this.setMaterialIndex(),0==this.CenterIndex?(e=this.Min,i=this.Max,t=[e,[e[0],e[1],i[2]],[e[0],i[1],e[2]],[e[0],i[1],i[2]],[i[0],e[1],e[2]],[i[0],e[1],i[2]],[i[0],i[1],e[2]],i]):(this.c=o.Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let n,r=this.controlpoints;if(0==this.CenterIndex){if(!U&&this.Onscreen)return void this.append();n=r}else{let t=r.length;n=Array(t);for(let e=0;e<t;++e)n[e]=this.T(r[e])}let s=o.orthographic?1:this.Min[2]/o.maxBound[2],a=.75*Math.hypot(s*(S.xmax-S.xmin),s*(S.ymax-S.ymin))/b;this.res2=a*a,this.Epsilon=.1*a,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(n)}}function pt(t,e){let i=t[0],n=t.length;for(let r=1;r<n;++r)i=e(i,t[r]);return i}class vt extends ut{constructor(t,e,i,n,r,s){super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,this.color=n;let a=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==a||4==a?t+n[3][3]<4:t<3}else this.transparent=c[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data);let o=this.L2norm2(this.controlpoints),h=Math.sqrt(1e3*Number.EPSILON*o);this.epsilon=o*Number.EPSILON,this.Min=r||this.Bounds(this.controlpoints,Math.min,h),this.Max=s||this.Bounds(this.controlpoints,Math.max,h)}setMaterialIndex(){this.transparent?this.setMaterial(tt,Le):this.color?this.setMaterial(J,Ee):this.setMaterial(Q,Ae)}cornerbound(t,e){let i=e(t[0],t[3]);return i=e(i,t[12]),e(i,t[15])}controlbound(t,e){let i=e(t[1],t[2]);return i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[6]),i=e(i,t[7]),i=e(i,t[8]),i=e(i,t[9]),i=e(i,t[10]),i=e(i,t[11]),i=e(i,t[13]),e(i,t[14])}bound(t,e,i,n,r){if(i=e(i,this.cornerbound(t,e)),e(-1,1)*(i-this.controlbound(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Ot(t[0],t[1],t[2],t[3]),a=new Ot(t[4],t[5],t[6],t[7]),o=new Ot(t[8],t[9],t[10],t[11]),h=new Ot(t[12],t[13],t[14],t[15]),l=new Ot(t[0],t[4],t[8],t[12]),c=new Ot(s.m0,a.m0,o.m0,h.m0),d=new Ot(s.m3,a.m3,o.m3,h.m3),m=new Ot(s.m5,a.m5,o.m5,h.m5),f=new Ot(s.m4,a.m4,o.m4,h.m4),u=new Ot(s.m2,a.m2,o.m2,h.m2),p=new Ot(t[3],t[7],t[11],t[15]),v=[t[0],s.m0,s.m3,s.m5,l.m0,c.m0,d.m0,m.m0,l.m3,c.m3,d.m3,m.m3,l.m5,c.m5,d.m5,m.m5];i=this.bound(v,e,i,n,r);let x=[l.m5,c.m5,d.m5,m.m5,l.m4,c.m4,d.m4,m.m4,l.m2,c.m2,d.m2,m.m2,t[12],h.m0,h.m3,h.m5];i=this.bound(x,e,i,n,r);let g=[m.m5,f.m5,u.m5,p.m5,m.m4,f.m4,u.m4,p.m4,m.m2,f.m2,u.m2,p.m2,h.m5,h.m4,h.m2,t[15]];i=this.bound(g,e,i,n,r);let w=[s.m5,s.m4,s.m2,t[3],m.m0,f.m0,u.m0,p.m0,m.m3,f.m3,u.m3,p.m3,m.m5,f.m5,u.m5,p.m5];return this.bound(w,e,i,n,r)}cornerboundtri(t,e){let i=e(t[0],t[6]);return e(i,t[9])}controlboundtri(t,e){let i=e(t[1],t[2]);return i=e(i,t[3]),i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[7]),e(i,t[8])}boundtri(t,e,i,n,r){if(i=e(i,this.cornerboundtri(t,e)),e(-1,1)*(i-this.controlboundtri(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Pt(t),a=[s.l003,s.l102,s.l012,s.l201,s.l111,s.l021,s.l300,s.l210,s.l120,s.l030];i=this.boundtri(a,e,i,n,r);let o=[s.l300,s.r102,s.r012,s.r201,s.r111,s.r021,s.r300,s.r210,s.r120,s.r030];i=this.boundtri(o,e,i,n,r);let h=[s.l030,s.u102,s.u012,s.u201,s.u111,s.u021,s.r030,s.u210,s.u120,s.u030];i=this.boundtri(h,e,i,n,r);let l=[s.r030,s.u201,s.r021,s.u102,s.c111,s.r012,s.l030,s.l120,s.l210,s.l300];return this.boundtri(l,e,i,n,r)}Bounds(t,e,i){let n=Array(3),r=t.length,s=Array(r);for(let a=0;a<3;++a){for(let e=0;e<r;++e)s[e]=t[e][a];n[a]=16==r?this.bound(s,e,s[0],i,p):10==r?this.boundtri(s,e,s[0],i,p):pt(s,e)}return[n[0],n[1],n[2]]}L2norm2(t){let e=t[0],i=0,n=t.length;for(let r=1;r<n;++r)i=Math.max(i,Ut([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));return i}processTriangle(t){let e=t[0],i=t[1],n=t[2],r=St(Bt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-e[0],n[1]-e[1],n[2]-e[2]]));if(!this.offscreen([e,i,n])){let t,s,a;this.color?(t=this.data.Vertex(e,r,this.color[0]),s=this.data.Vertex(i,r,this.color[1]),a=this.data.Vertex(n,r,this.color[2])):(t=this.vertex(e,r),s=this.vertex(i,r),a=this.vertex(n,r)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],n=t[2],r=t[3],s=Bt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-i[0],n[1]-i[1],n[2]-i[2]]),a=Bt([n[0]-r[0],n[1]-r[1],n[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=St([s[0]+a[0],s[1]+a[1],s[2]+a[2]]);if(!this.offscreen([e,i,n,r])){let t,s,a,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),a=this.data.Vertex(n,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),a=this.vertex(n,o),h=this.vertex(r,o)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,n,r){new wt([t[e],t[i],t[n],t[r]],0,it,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=V&&(it=this.color?-1-it:1+it),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==V)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],n=t[12],r=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],n);Ut(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r),Ut(s)<this.epsilon&&(s=this.normal(r,t[11],t[7],i,t[4],t[8],n)));let a=this.normal(e,t[4],t[8],n,t[13],t[14],r);Ut(a)<this.epsilon&&(a=this.normal(e,t[4],t[8],n,t[11],t[7],i),Ut(a)<this.epsilon&&(a=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(n,t[13],t[14],r,t[11],t[7],i);Ut(o)<this.epsilon&&(o=this.normal(n,t[13],t[14],r,t[2],t[1],e),Ut(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],n,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(Ut(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],n),Ut(h)<this.epsilon&&(h=this.normal(n,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,s,l),u=this.data.Vertex(n,a,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,n,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(n,a),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,n,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):this.color?J.append(this.data):Q.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:this.color?J.rendered=!1:Q.rendered=!1}Render(t,e,i,n,r,s,a,o,h,l,c,d,m,f,u,p,v){let x=this.Distance(t);if(x[0]<this.res2&&x[1]<this.res2)this.offscreen([s,a,o])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n))),this.offscreen([s,o,h])||(0==V?(this.data.indices.push(e),this.data.indices.push(n),this.data.indices.push(r)):(this.data.indices.push(n),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let g=t[0],w=t[3],M=t[12],b=t[15];if(x[0]<this.res2){let x=new _t(g,t[1],t[2],w),R=new _t(t[4],t[5],t[6],t[7]),T=new _t(t[8],t[9],t[10],t[11]),y=new _t(M,t[13],t[14],b),A=[g,x.m0,x.m3,x.m5,t[4],R.m0,R.m3,R.m5,t[8],T.m0,T.m3,T.m5,M,y.m0,y.m3,y.m5],E=[x.m5,x.m4,x.m2,w,R.m5,R.m4,R.m2,t[7],T.m5,T.m4,T.m2,t[11],y.m5,y.m4,y.m2,b],I=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);Ut(I)<=this.epsilon&&(I=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),Ut(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let L=this.normal(E[3],E[2],E[1],E[0],E[4],E[8],E[12]);Ut(L)<=this.epsilon&&(L=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15]),Ut(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12])));let N=this.Epsilon,O=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=Ht(M,t[13],t[14],b)<this.res2){let t=St(this.differential(E[12],E[8],E[4],E[0]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[15];let _=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=Ht(g,t[1],t[2],w)<this.res2){let t=St(this.differential(A[3],A[7],A[11],A[15]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[0];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),x[e]=.5*(v[e]+f[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,i,g,w,s,a,O,_,l,c,!1,m,f,u,t,x),this.Render(E,w,g,n,r,_,O,o,h,!1,c,d,m,x,t,p,v)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,i,t,f,s,a,O,_,l,c,!1,m),this.Render(E,f,t,n,r,_,O,o,h,!1,c,d,m)}return}if(x[1]<this.res2){let x=new _t(g,t[4],t[8],M),R=new _t(t[1],t[5],t[9],t[13]),T=new _t(t[2],t[6],t[10],t[14]),y=new _t(w,t[7],t[11],b),A=[g,t[1],t[2],w,x.m0,R.m0,T.m0,y.m0,x.m3,R.m3,T.m3,y.m3,x.m5,R.m5,T.m5,y.m5],E=[x.m5,R.m5,T.m5,y.m5,x.m4,R.m4,T.m4,y.m4,x.m2,R.m2,T.m2,y.m2,M,t[13],t[14],b],I=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);Ut(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),Ut(I)<=this.epsilon&&(I=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let L=this.normal(E[15],E[11],E[7],E[3],E[2],E[1],E[0]);Ut(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12]),Ut(L)<=this.epsilon&&(L=this.normal(E[12],E[13],E[14],E[15],E[2],E[1],E[0])));let N=this.Epsilon,O=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=Ht(g,t[4],t[8],M)<this.res2){let t=St(this.differential(E[0],E[1],E[2],E[3]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[12];let _=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Ht(b,t[11],t[7],w)<this.res2){let t=St(this.differential(A[15],A[14],A[13],A[12]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[3];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(p[e]+v[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,g,w,r,s,O,_,h,l,!1,d,m,f,t,x,v),this.Render(E,g,i,n,w,O,a,o,_,l,c,d,!1,t,u,p,x)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,t,f,r,s,O,_,h,l,!1,d,m),this.Render(E,t,i,n,f,O,a,o,_,l,c,d,!1)}return}let R=new _t(g,t[1],t[2],w),T=new _t(t[4],t[5],t[6],t[7]),y=new _t(t[8],t[9],t[10],t[11]),A=new _t(M,t[13],t[14],b),E=new _t(g,t[4],t[8],M),I=new _t(R.m0,T.m0,y.m0,A.m0),L=new _t(R.m3,T.m3,y.m3,A.m3),N=new _t(R.m5,T.m5,y.m5,A.m5),O=new _t(R.m4,T.m4,y.m4,A.m4),_=new _t(R.m2,T.m2,y.m2,A.m2),P=new _t(w,t[7],t[11],b),S=[g,R.m0,R.m3,R.m5,E.m0,I.m0,L.m0,N.m0,E.m3,I.m3,L.m3,N.m3,E.m5,I.m5,L.m5,N.m5],U=[E.m5,I.m5,L.m5,N.m5,E.m4,I.m4,L.m4,N.m4,E.m2,I.m2,L.m2,N.m2,M,A.m0,A.m3,A.m5],V=[N.m5,O.m5,_.m5,P.m5,N.m4,O.m4,_.m4,P.m4,N.m2,O.m2,_.m2,P.m2,A.m5,A.m4,A.m2,b],B=[R.m5,R.m4,R.m2,w,N.m0,O.m0,_.m0,P.m0,N.m3,O.m3,_.m3,P.m3,N.m5,O.m5,_.m5,P.m5],C=S[15],D=this.normal(S[0],S[4],S[8],S[12],S[13],S[14],S[15]);Ut(D)<this.epsilon&&(D=this.normal(S[0],S[4],S[8],S[12],S[11],S[7],S[3]),Ut(D)<this.epsilon&&(D=this.normal(S[3],S[2],S[1],S[0],S[13],S[14],S[15])));let F=this.normal(U[12],U[13],U[14],U[15],U[11],U[7],U[3]);Ut(F)<this.epsilon&&(F=this.normal(U[12],U[13],U[14],U[15],U[2],U[1],U[0]),Ut(F)<this.epsilon&&(F=this.normal(U[0],U[4],U[8],U[12],U[11],U[7],U[3])));let z=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);Ut(z)<this.epsilon&&(z=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),Ut(z)<this.epsilon&&(z=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let H=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);Ut(H)<this.epsilon&&(H=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]),Ut(H)<this.epsilon&&(H=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12])));let X=this.normal(V[3],V[2],V[1],C,V[4],V[8],V[12]),G=this.Epsilon,W=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=Ht(g,t[4],t[8],M)<this.res2){let t=St(this.differential(U[0],U[1],U[2],U[3]));W=[W[0]-G*t[0],W[1]-G*t[1],W[2]-G*t[2]]}else W=S[12];let j=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=Ht(M,t[13],t[14],b)<this.res2){let t=St(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-G*t[0],j[1]-G*t[1],j[2]-G*t[2]]}else j=U[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Ht(b,t[11],t[7],w)<this.res2){let t=St(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-G*t[0],k[1]-G*t[1],k[2]-G*t[2]]}else k=V[3];let Y=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=Ht(g,t[1],t[2],w)<this.res2){let t=St(this.differential(S[3],S[7],S[11],S[15]));Y=[Y[0]-G*t[0],Y[1]-G*t[1],Y[2]-G*t[2]]}else Y=B[0];if(f){let t=Array(4),x=Array(4),g=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(u[e]+p[e]),g[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+g[e]);let b=this.data.Vertex(W,D,t),R=this.data.Vertex(j,F,x),T=this.data.Vertex(k,z,g),y=this.data.Vertex(Y,H,w),A=this.data.Vertex(C,X,M);this.Render(S,e,b,A,y,s,W,C,Y,l,!1,!1,m,f,t,M,w),this.Render(U,b,i,R,A,W,a,j,C,l,c,!1,!1,t,u,x,M),this.Render(V,A,R,n,T,C,j,o,k,!1,c,d,!1,M,x,p,g),this.Render(B,y,A,T,r,Y,C,k,h,!1,!1,d,m,w,M,g,v)}else{let t=this.vertex(W,D),f=this.vertex(j,F),u=this.vertex(k,z),p=this.vertex(Y,H),v=this.vertex(C,X);this.Render(S,e,t,v,p,s,W,C,Y,l,!1,!1,m),this.Render(U,t,i,f,v,W,a,j,C,l,c,!1,!1),this.Render(V,v,f,n,u,C,j,o,k,!1,c,d,!1),this.Render(B,p,v,u,r,Y,C,k,h,!1,!1,d,m)}}}process3(t){if(1==V)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],n=t[9],r=this.normal(n,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],n),a=this.normal(i,t[7],t[8],n,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(n,a,l);this.Render3(t,c,d,m,e,i,n,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,s),l=this.vertex(n,a);this.Render3(t,o,h,l,e,i,n,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,n,r,s,a,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,s,a])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],x=t[4],g=t[5],w=t[6],M=t[7],b=t[8],R=t[9],T=[.5*(R[0]+g[0]),.5*(R[1]+g[1]),.5*(R[2]+g[2])],y=[.5*(R[0]+b[0]),.5*(R[1]+b[1]),.5*(R[2]+b[2])],A=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],E=[.5*(b[0]+x[0]),.5*(b[1]+x[1]),.5*(b[2]+x[2])],I=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],L=[.5*(p[0]+x[0]),.5*(p[1]+x[1]),.5*(p[2]+x[2])],N=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],O=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],_=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],P=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],S=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],U=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(T[0]+A[0]),.5*(T[1]+A[1]),.5*(T[2]+A[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],C=[.5*(A[0]+N[0]),.5*(A[1]+N[1]),.5*(A[2]+N[2])],D=[.5*E[0]+.25*(x[0]+u[0]),.5*E[1]+.25*(x[1]+u[1]),.5*E[2]+.25*(x[2]+u[2])],F=[.5*(I[0]+_[0]),.5*(I[1]+_[1]),.5*(I[2]+_[2])],z=[.5*L[0]+.25*(x[0]+M[0]),.5*L[1]+.25*(x[1]+M[1]),.5*L[2]+.25*(x[2]+M[2])],H=[.25*(g[0]+x[0])+.5*O[0],.25*(g[1]+x[1])+.5*O[1],.25*(g[2]+x[2])+.5*O[2]],X=[.5*(P[0]+S[0]),.5*(P[1]+S[1]),.5*(P[2]+S[2])],G=[.5*(S[0]+U[0]),.5*(S[1]+U[1]),.5*(S[2]+U[2])],W=[.5*(z[0]+X[0]),.5*(z[1]+X[1]),.5*(z[2]+X[2])],j=[.5*(z[0]+G[0]),.5*(z[1]+G[1]),.5*(z[2]+G[2])],k=[.5*(X[0]+G[0]),.5*(X[1]+G[1]),.5*(X[2]+G[2])],Y=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(V[0]+D[0]),.5*(V[1]+D[1]),.5*(V[2]+D[2])],Z=[.5*(C[0]+D[0]),.5*(C[1]+D[1]),.5*(C[2]+D[2])],Q=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],J=[f,P,N,X,[.5*(L[0]+P[0]),.5*(L[1]+P[1]),.5*(L[2]+P[2])],C,k,W,Z,Q],tt=[k,G,j,U,[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y,w,_,F,q],et=[Q,K,V,$,[.5*(T[0]+E[0]),.5*(T[1]+E[1]),.5*(T[2]+E[2])],T,q,B,y,R],it=[q,$,Y,K,[.25*(A[0]+I[0]+S[0]+x[0]),.25*(A[1]+I[1]+S[1]+x[1]),.25*(A[2]+I[2]+S[2]+x[2])],j,Q,Z,W,k],nt=this.normal(k,j,Y,q,$,K,Q),rt=this.normal(q,$,K,Q,Z,W,k),st=this.normal(Q,Z,W,k,j,Y,q),at=this.Epsilon,ot=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!o)if(o=Ht(w,M,b,R)<this.res2){let t=St(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-at*t[0],ot[1]-at*t[1],ot[2]-at*t[2]]}else ot=q;let ht=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])];if(!h)if(h=Ht(f,p,g,R)<this.res2){let t=St(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-at*t[0],ht[1]-at*t[1],ht[2]-at*t[2]]}else ht=Q;let lt=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!l)if(l=Ht(f,u,v,w)<this.res2){let t=St(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-at*t[0],lt[1]-at*t[1],lt[2]-at*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,nt,t),v=this.data.Vertex(ht,rt,f),x=this.data.Vertex(lt,st,u);this.Render3(J,e,x,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,x,i,p,lt,s,ot,o,!1,l,u,d,t),this.Render3(et,v,p,n,ht,ot,a,o,h,!1,f,t,m),this.Render3(it,p,v,x,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,nt),c=this.vertex(ht,rt),d=this.vertex(lt,st);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,n,ht,ot,a,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],n=t[12],r=t[15],s=Xt(e,n,i,r);s=Math.max(s,Ht(e,t[4],t[8],n)),s=Math.max(s,Ht(t[1],t[5],t[9],t[13])),s=Math.max(s,Ht(i,t[7],t[11],r)),s=Math.max(s,Ht(t[2],t[6],t[10],t[14]));let a=Xt(e,i,n,r);return a=Math.max(a,Ht(e,t[1],t[2],i)),a=Math.max(a,Ht(t[4],t[5],t[6],t[7])),a=Math.max(a,Ht(t[8],t[9],t[10],t[11])),a=Math.max(a,Ht(n,t[13],t[14],r)),[s,a]}Distance3(t){let e=t[0],i=t[4],n=t[6],r=t[9],s=Ut([(e[0]+n[0]+r[0])*(1/3)-i[0],(e[1]+n[1]+r[1])*(1/3)-i[1],(e[2]+n[2]+r[2])*(1/3)-i[2]]);return s=Math.max(s,Ht(e,t[1],t[3],n)),s=Math.max(s,Ht(e,t[2],t[5],r)),Math.max(s,Ht(n,t[7],t[8],r))}differential(t,e,i,n){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return Ut(r)>this.epsilon?r:(r=Ft(t,e,i),Ut(r)>this.epsilon?r:zt(t,e,i,n))}sumdifferential(t,e,i,n,r,s,a){let o=this.differential(t,e,i,n),h=this.differential(t,r,s,a);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,n,r,s,a){let o=3*(r[0]-n[0]),h=3*(r[1]-n[1]),l=3*(r[2]-n[2]),c=3*(i[0]-n[0]),d=3*(i[1]-n[1]),m=3*(i[2]-n[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(Ut(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=Ft(n,i,e),x=Ft(n,r,s),g=Bt(x,u),w=Bt(p,v);if(f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],Ut(f)>this.epsilon)return f;let M=zt(n,i,e,t),b=zt(n,r,s,a);g=Bt(p,M),w=Bt(b,u);let R=Bt(x,v);return f=[g[0]+w[0]+R[0],g[1]+w[1]+R[1],g[2]+w[2]+R[2]],Ut(f)>this.epsilon?f:(g=Bt(b,v),w=Bt(x,M),f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],Ut(f)>this.epsilon?f:Bt(b,M))}}function xt(t){return 0<=t&&t<=1}class gt{constructor(t,e,i){const n=1e3*Number.EPSILON,r=n*n;if(Math.abs(t)<=n*Math.abs(e)+r*Math.abs(i))Math.abs(e)>n*Math.abs(i)?(this.roots=1,this.t1=-i/e):0==i?(this.roots=1,this.t1=0):this.roots=0;else{let r=.5*e/t,s=e*r;if(Math.abs(s)<=n*Math.abs(i)){let e=-i/t;e>=0?(this.roots=2,this.t2=Math.sqrt(e),this.t1=-this.t2):this.roots=0}else{let t=-2*i/s;if(t>-1){this.roots=2;let e=r*function(t){return t/(Math.sqrt(1+t)+1)}(t),i=-e-2*r;i<=e?(this.t1=i,this.t2=e):(this.t1=e,this.t2=i)}else-1==t?(this.roots=1,this.t1=this.t2=-r):this.roots=0}}}}class wt extends ut{constructor(t,e,i,n,r){if(super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,n&&r)this.Min=n,this.Max=r;else{let t=this.Bounds(this.controlpoints);this.Min=t[0],this.Max=t[1]}}Bounds(t){let e=Array(3),i=Array(3),n=t.length,r=Array(n);for(let h=0;h<3;++h){for(let e=0;e<n;++e)r[e]=t[e][h];let l,c;if(l=c=r[0],4==n){l=Math.min(l,r[3]),c=Math.max(c,r[3]);let t=(s=r[0],a=r[1],o=r[2],[r[3]-s+3*(a-o),2*(s+o)-4*a,a-s]),e=new gt(t[0],t[1],t[2]);if(0!=e.roots&&xt(e.t1)){let t=Ct(r[0],r[1],r[2],r[3],e.t1);l=Math.min(l,t),c=Math.max(c,t)}if(2==e.roots&&xt(e.t2)){let t=Ct(r[0],r[1],r[2],r[3],e.t2);l=Math.min(l,t),c=Math.max(c,t)}}else{let t=r[1];l=Math.min(l,t),c=Math.max(c,t)}e[h]=l,i[h]=c}var s,a,o;return[[e[0],e[1],e[2]],[i[0],i[1],i[2]]]}setMaterialIndex(){this.setMaterial(Z,ye)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],n=t[2],r=t[3],s=this.normal(Dt(e,i),Ft(e,i,n)),a=this.normal(Dt(n,r),Ft(r,n,i)),o=this.data.vertex(e,s),h=this.data.vertex(r,a);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){Z.append(this.data)}notRendered(){Z.rendered=!1}Render(t,e,i){let n=t[0],r=t[1],s=t[2],a=t[3];if(Ht(n,r,s,a)<this.res2)this.offscreen([n,a])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],l=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[n,o,c,m],u=[m,d,l,a],p=this.normal(function(t,e,i,n){return[i[0]+n[0]-t[0]-e[0],i[1]+n[1]-t[1]-e[1],i[2]+n[2]-t[2]-e[2]]}(n,r,s,a),function(t,e,i,n){return[3*t[0]-5*e[0]+i[0]+n[0],3*t[1]-5*e[1]+i[1]+n[1],3*t[2]-5*e[2]+i[2]+n[2]]}(n,r,s,a)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=Vt(t,t),n=Vt(t,e);return[i*e[0]-n*t[0],i*e[1]-n*t[1],i*e[2]-n*t[2]]}}class Mt extends ut{constructor(t,e,i){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=t,this.Max=t}setMaterialIndex(){this.setMaterial(K,Te)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){K.append(this.data)}notRendered(){K.rendered=!1}}class bt extends ut{constructor(t,e){super(),this.CenterIndex=t,this.MaterialIndex=e,this.controlpoints=window.Positions,this.Normals=window.Normals,this.Colors=window.Colors,this.Indices=window.Indices,this.transparent=c[this.MaterialIndex].diffuse[3]<1,this.Min=this.Bounds(this.controlpoints,Math.min),this.Max=this.Bounds(this.controlpoints,Math.max)}Bounds(t,e){let i=Array(3),n=t.length,r=Array(n);for(let s=0;s<3;++s){for(let e=0;e<n;++e)r[e]=t[e][s];i[s]=pt(r,e)}return[i[0],i[1],i[2]]}setMaterialIndex(){this.transparent?this.setMaterial(tt,Le):this.setMaterial(et,Ie)}process(t){this.data.vertices=new Array(6*t.length),it=this.Colors.length>0?-1-it:1+it;for(let e=0,i=this.Indices.length;e<i;++e){let i=this.Indices[e],n=i[0],r=t[n[0]],s=t[n[1]],a=t[n[2]],o=!this.offscreen([r,s,a]),h=i.length>1?i[1]:n;if(h&&0!=h.length||(h=n),this.Colors.length>0){let t=i.length>2?i[2]:n;t&&0!=t.length||(t=n);let e=this.Colors[t[0]],l=this.Colors[t[1]],c=this.Colors[t[2]];this.transparent|=e[3]+l[3]+c[3]<3,0==V?(this.data.iVertex(n[0],r,this.Normals[h[0]],o,e),this.data.iVertex(n[1],s,this.Normals[h[1]],o,l),this.data.iVertex(n[2],a,this.Normals[h[2]],o,c)):(this.data.iVertex(n[0],r,this.Normals[h[0]],o,e),this.data.iVertex(n[1],s,this.Normals[h[1]],o,l),this.data.iVertex(n[1],s,this.Normals[h[1]],o,l),this.data.iVertex(n[2],a,this.Normals[h[2]],o,c),this.data.iVertex(n[2],a,this.Normals[h[2]],o,c),this.data.iVertex(n[0],r,this.Normals[h[0]],o,e))}else 0==V?(this.data.iVertex(n[0],r,this.Normals[h[0]],o),this.data.iVertex(n[1],s,this.Normals[h[1]],o),this.data.iVertex(n[2],a,this.Normals[h[2]],o)):(this.data.iVertex(n[0],r,this.Normals[h[0]],o),this.data.iVertex(n[1],s,this.Normals[h[1]],o),this.data.iVertex(n[1],s,this.Normals[h[1]],o),this.data.iVertex(n[2],a,this.Normals[h[2]],o),this.data.iVertex(n[2],a,this.Normals[h[2]],o),this.data.iVertex(n[0],r,this.Normals[h[0]],o))}this.data.nvertices=t.length,this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):et.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:et.rendered=!1}}function Rt(){M=-Math.tan(.5*o.angleOfView)*o.maxBound[2],_.x=_.y=0,_.z=.5*(o.minBound[2]+o.maxBound[2]),x=v=o.zoom0,S.zmin=o.minBound[2],S.zmax=o.maxBound[2],P.x=P.y=0,_e(),U=!0,Oe()}function Tt(){mat4.identity(T),Rt(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1}let yt=0,At=1,Et=2,It=3,Lt=4;function Nt(e=[]){let i=lt(t,vertex,t.VERTEX_SHADER,e),n=lt(t,fragment,t.FRAGMENT_SHADER,e),r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,n),t.bindAttribLocation(r,yt,"position"),t.bindAttribLocation(r,At,"normal"),t.bindAttribLocation(r,Et,"materialIndex"),t.bindAttribLocation(r,It,"color"),t.bindAttribLocation(r,Lt,"width"),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialize shaders"),r}class Ot{constructor(t,e,i,n){this.m0=.5*(t+e);let r=.5*(e+i);this.m2=.5*(i+n),this.m3=.5*(this.m0+r),this.m4=.5*(r+this.m2),this.m5=.5*(this.m3+this.m4)}}class _t{constructor(t,e,i,n){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),a=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+n[0]),.5*(i[1]+n[1]),.5*(i[2]+n[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+s),.5*(this.m0[2]+a)],this.m4=[.5*(r+this.m2[0]),.5*(s+this.m2[1]),.5*(a+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}class Pt{constructor(t){this.l003=t[0];let e=t[1],i=t[2],n=t[3],r=t[4],s=t[5];this.r300=t[6];let a=t[7],o=t[8];this.u030=t[9],this.u021=.5*(this.u030+s),this.u120=.5*(this.u030+o);let h=.5*(s+i),l=.5*(o+r),c=.5*(o+a),d=.5*(i+r);this.l012=.5*(i+this.l003);let m=.5*(r+n);this.r210=.5*(a+this.r300),this.l102=.5*(this.l003+e);let f=.5*(e+n);this.r201=.5*(n+this.r300),this.u012=.5*(this.u021+h),this.u210=.5*(this.u120+c),this.l021=.5*(h+this.l012);let u=.5*l+.25*(r+e);this.r120=.5*(c+this.r210);let p=.5*d+.25*(r+a),v=.25*(s+r)+.5*m;this.l201=.5*(this.l102+f),this.r102=.5*(f+this.r201),this.l210=.5*(p+this.l201),this.r012=.5*(p+this.r102),this.l300=.5*(this.l201+this.r102),this.r021=.5*(v+this.r120),this.u201=.5*(this.u210+v),this.r030=.5*(this.u210+this.r120),this.u102=.5*(this.u012+u),this.l120=.5*(this.l021+u),this.l030=.5*(this.u012+this.l021),this.l111=.5*(d+this.l102),this.r111=.5*(m+this.r210),this.u111=.5*(this.u021+l),this.c111=.25*(h+c+f+r)}}function St(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function Ut(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function Vt(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Bt(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Ct(t,e,i,n,r){let s=1-r,a=s*s;return a*s*t+r*(3*(a*e+r*s*i)+r*r*n)}function Dt(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ft(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function zt(t,e,i,n){return[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])]}function Ht(t,e,i,n){let r=[1/3*(n[0]-t[0]),1/3*(n[1]-t[1]),1/3*(n[2]-t[2])];return Math.max(Ut([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),Ut([n[0]-r[0]-i[0],n[1]-r[1]-i[1],n[2]-r[2]-i[2]]))}function Xt(t,e,i,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],s=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Math.max(Ut(Bt(r,St(s))),Ut(Bt(s,St(r))))/9}function Gt(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Wt(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function jt(t){oe||he(),B=!0,C=t.clientX,D=t.clientY}let kt,Yt,$t=!1;function qt(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function Kt(t){t.preventDefault(),oe||he();let e=t.targetTouches;pe=ve=$t=!1,ue||(1!=e.length||B||(Yt=(new Date).getTime(),touchId=e[0].identifier,C=e[0].pageX,D=e[0].pageY),2!=e.length||B||(touchId=e[0].identifier,kt=qt(e),$t=!0))}function Zt(t){B=!1}function Qt(t,e,i,n,r){if(t==i&&e==n)return;let[s,a]=function(t,e){let i=re(t),n=re(e),r=Vt(i,n);return[r>1?0:r<-1?f:Math.acos(r),St(Bt(i,n))]}([t,-e],[i,-n]);mat4.fromRotation(O,2*r*R*s/v,a),mat4.multiply(T,O,T)}function Jt(t,e,i,n){let r=1/v;P.x+=(i-t)*r*s,P.y-=(n-e)*r*a}function te(t,e,i,n){o.orthographic?Jt(t,e,i,n):(_.x+=(i-t)*(S.xmax-S.xmin),_.y-=(n-e)*(S.ymax-S.ymin))}function ee(){var t,e;t=A,e=T,mat4.fromTranslation(O,[_.x,_.y,_.z]),mat4.invert(N,O),mat4.multiply(t,e,N),mat4.multiply(t,O,t),mat4.translate(A,A,[_.x,_.y,0]),mat3.fromMat4(L,A),mat3.invert(I,L),mat4.multiply(E,y,A)}function ie(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;v<=e&&(v=e),v>=t&&(v=t),(1.5*v<x||v>1.5*x)&&(U=!0,x=v)}function ne(t){let e=o.zoomStep*a*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(o.zoomFactor);Math.abs(e)<i&&(v*=o.zoomFactor**e,ie())}function re(t){let e=t[0],i=t[1],n=Math.hypot(e,i);return n>1&&(denom=1/n,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function se(t,e,i,n){ne(e-n)}function ae(t,e,i,n=1){let r;switch(i){case 1:r=Qt;break;case 2:r=Jt;break;case 3:r=se;break;case 4:r=te;break;default:r=(t,e,i,n)=>{}}r((C-s)/s,(D-a)/a,(t-s)/s,(e-a)/a,n),C=t,D=e,_e(),Oe()}let oe=0;function he(){oe=1,o.canvas.addEventListener("wheel",me,!1)}function le(){let t,e,i;[t,e,i]=function(){let t=Array(3),e=Array(3),i=Array(3),n=_.x,r=_.y,s=.5*(S.zmin+S.zmax);for(let a=0;a<3;++a){let h=0,l=0,c=0,d=4*a;for(let t=0;t<4;++t){let e=4*t,i=T[e],a=T[e+1],m=T[e+2],f=T[e+3],u=o.Transform[d+t];h+=u*(f-n*i-r*a-s*m),c+=u*a,l+=u*(f-n*i-r*a)}t[a]=h,e[a]=c,i[a]=l}return[t,e,i]}();let n=o.orthographic?" orthographic(":" perspective(",r="".padStart(n.length),s="currentprojection=\n"+n+"camera=("+t+"),\n"+r+"up=("+e+"),\n"+r+"target=("+i+"),\n"+r+"zoom="+v*o.initialZoom/o.zoom0;return o.orthographic||(s+=",\n"+r+"angle="+2*Math.atan(Math.tan(.5*o.angleOfView)/v)/u),0==g&&0==w||(s+=",\n"+r+"viewportshift=("+g+","+w+")"),o.orthographic||(s+=",\n"+r+"autoadjust=false"),s+=");\n",window.parent.asyProjection=!0,s}function ce(t){if(oe||he(),o.embedded&&oe&&27==t.keyCode)return oe=0,void o.canvas.removeEventListener("wheel",me,!1);let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":Tt();break;case"m":++V,3==V&&(V=0),2!=V&&(o.embedded||st(),rt(o.ibl)),U=!0,Oe();break;case"+":case"=":case">":v*=o.zoomFactor,de();break;case"-":case"_":case"<":v/=o.zoomFactor,de();break;case"c":window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",le())}e.length>0&&(mat4.rotate(T,T,.1,e),ee(),Oe())}function de(){ie(),_e(),Oe()}function me(t){t.preventDefault(),t.deltaY<0?v*=o.zoomFactor:v/=o.zoomFactor,de()}function fe(t){if(!B)return;let e,i=t.clientX,n=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,ae(i,n,e)}let ue=!1,pe=!1,ve=!1;function xe(t){if(t.preventDefault(),ue)return;let e=t.targetTouches;if(!$t&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,n=t-C,r=i-D,s=n*n+r*r<=o.shiftHoldDistance*o.shiftHoldDistance;if(s&&!pe&&!ve&&(new Date).getTime()-Yt>o.shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(o.vibrateTime),pe=!0),pe)ae(t,i,2);else if(!s){ve=!0,ae(e[0].pageX,e[0].pageY,1,.5)}}if($t&&!pe&&2==e.length&&touchId==e[0].identifier){let t=qt(e),i=t-kt;ue=!0,i*=o.zoomPinchFactor,i>o.zoomPinchCap&&(i=o.zoomPinchCap),i<-o.zoomPinchCap&&(i=-o.zoomPinchCap),ne(i/b),kt=t,pe=ve=ue=!1,_e(),Oe()}}let ge,we,Me,be,Re=[];function Te(){dt(K,ge),K.clear()}function ye(){dt(Z,we),Z.clear()}function Ae(){dt(Q,we),Q.clear()}function Ee(){dt(J,Me),J.clear()}function Ie(){dt(et,be),et.rendered=!1,et.clear()}function Le(){let e=tt.indices;if(V>0)return dt(tt,be,e),void tt.clear();if(e.length>0){!function(t){let e=A[2],i=A[6],n=A[10];Re.length=t.length;for(let r=0;r<t.length;++r){let s=6*r;Re[r]=e*t[s]+i*t[s+1]+n*t[s+2]}}(tt.vertices);let i=e.length/3,n=Array(i).fill().map((t,e)=>e);n.sort((function(t,i){let n=3*t;Ia=e[n],Ib=e[n+1],Ic=e[n+2];let r=3*i;return IA=e[r],IB=e[r+1],IC=e[r+2],Re[Ia]+Re[Ib]+Re[Ic]<Re[IA]+Re[IB]+Re[IC]?-1:1}));let r=Array(e.length);for(let t=0;t<i;++t){let i=3*n[t];r[3*t]=e[i],r[3*t+1]=e[i+1],r[3*t+2]=e[i+2]}t.depthMask(!1),dt(tt,be,r),tt.rendered=!1,t.depthMask(!0)}tt.clear()}function Ne(){Te(),ye(),Ae(),Ee(),Ie(),Le(),requestAnimationFrame(Ne)}function Oe(){o.embedded&&(i.width=o.canvasWidth,i.height=o.canvasHeight,Pe()),t.clearColor(o.background[0],o.background[1],o.background[2],o.background[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT);for(const t of h)t.render();Ne(),o.embedded&&(n.clearRect(0,0,o.canvasWidth,o.canvasHeight),n.drawImage(i,0,0)),0==V&&(U=!1)}function _e(){!function(t,e,i,n){let r=t/e;g=(i/t+o.viewportShift[0])*v,w=(n/e+o.viewportShift[1])*v;let s=1/v;if(o.orthographic){let t=o.maxBound[0]-o.minBound[0],e=o.maxBound[1]-o.minBound[1];if(t<e*r){let t=.5*e*r*s,i=2*t*g,n=e*s*w;S.xmin=-t-i,S.xmax=t-i,S.ymin=o.minBound[1]*s-n,S.ymax=o.maxBound[1]*s-n}else{let e=.5*t*s/r,i=t*s*g,n=2*e*w;S.xmin=o.minBound[0]*s-i,S.xmax=o.maxBound[0]*s-i,S.ymin=-e-n,S.ymax=e-n}}else{let t=M*s,e=t*r,i=2*e*g,n=2*t*w;S.xmin=-e-i,S.xmax=e-i,S.ymin=-t-n,S.ymax=t-n}}(o.canvasWidth,o.canvasHeight,P.x,P.y),(o.orthographic?mat4.ortho:mat4.frustum)(y,S.xmin,S.xmax,S.ymin,S.ymax,-S.zmax,-S.zmin),ee(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(le())}function Pe(){t.viewportWidth=o.canvasWidth,t.viewportHeight=o.canvasHeight,t.viewport(.5*(o.canvas.width-o.canvasWidth),.5*(o.canvas.height-o.canvasHeight),o.canvasWidth,o.canvasHeight),t.scissor(0,0,o.canvas.width,o.canvas.height)}function Se(t,e){t>void 0&&(t=void 0),e>void 0&&(e=void 0),P.x*=t/o.canvasWidth,P.y*=e/o.canvasHeight,o.canvasWidth=t,o.canvasHeight=e,o.embedded&&(o.canvas.width=i.width=o.canvasWidth,o.canvas.height=i.height=o.canvasHeight),b=Math.hypot(o.canvasWidth,o.canvasHeight),s=.5*o.canvas.width,a=.5*o.canvas.height,R=1+8*Math.hypot(o.viewportMargin[0],o.viewportMargin[1])/b,Pe(),_e(),U=!0}function Ue(){if(o.zoom0=o.initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),o.absolute&&!o.embedded)o.canvasWidth=o.canvasWidth0*window.devicePixelRatio,o.canvasHeight=o.canvasHeight0*window.devicePixelRatio;else{let t=o.canvasWidth0/o.canvasHeight0;o.canvasWidth=Math.max(window.innerWidth-10,10),o.canvasHeight=Math.max(window.innerHeight-10,10),!o.orthographic&&!window.parent.asyProjection&&o.canvasWidth<o.canvasHeight*t&&(o.zoom0*=o.canvasWidth/(o.canvasHeight*t))}o.canvas.width=o.canvasWidth,o.canvas.height=o.canvasHeight;window.innerWidth,window.innerHeight;let t=1/o.zoom0;o.viewportShift[0]*=t,o.viewportShift[1]*=t,Se(o.canvasWidth,o.canvasHeight),Rt()}class Ve{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],n=t[2],r=e*this.ct+n*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+n*this.ct+this.center[2]]}}function Be(t,e,i){let n=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[Gt(n),Wt(n)]}let Ce=4/3*(Math.sqrt(2)-1);async function De(t){return(await fetch(t)).arrayBuffer()}function Fe(t){return t.getBytes().filter((t,e)=>e%4!=3)}function ze(e,i,n=t.RGB16F){let r=e.width(),s=e.height(),a=t.createTexture();return t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,a),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,n,r,s,0,t.RGB,t.FLOAT,Fe(e)),a}window.webGLStart=function(){o.canvas=document.getElementById("Asymptote"),o.embedded=window.top.document!=document,ht(),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.DEPTH_TEST),t.enable(t.SCISSOR_TEST),o.canvas.onmousedown=jt,document.onmouseup=Zt,document.onmousemove=fe,o.canvas.onkeydown=ce,o.embedded||he(),o.canvas.addEventListener("touchstart",Kt,!1),o.canvas.addEventListener("touchend",Zt,!1),o.canvas.addEventListener("touchcancel",Zt,!1),o.canvas.addEventListener("touchleave",Zt,!1),o.canvas.addEventListener("touchmove",xe,!1),document.addEventListener("keydown",ce,!1),o.canvasWidth0=o.canvasWidth,o.canvasHeight0=o.canvasHeight,mat4.identity(T),0!=window.innerWidth&&0!=window.innerHeight&&Ue(),window.addEventListener("resize",Ue,!1),o.ibl&&async function(){let e=o.imageURL+o.image+"/";function i(t){return new Promise(e=>setTimeout(e,t))}for(;!Module.EXRLoader;)await i(0);promises=[De(o.imageURL+"refl.exr").then(t=>{let e=new Module.EXRLoader(t);j=ze(e,0)}),De(e+"diffuse.exr").then(t=>{let e=new Module.EXRLoader(t);W=ze(e,1)})],refl_promise=[],refl_promise.push(De(e+"refl0.exr"));for(let t=1;t<=8;++t)refl_promise.push(De(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let i=t.createTexture();t.activeTexture(t.TEXTURE0+2),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAX_LEVEL,e.length-1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MIN_LOD,0),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MAX_LOD,8);for(let i=0;i<e.length;++i){let n=new Module.EXRLoader(e[i]);t.texImage2D(t.TEXTURE_2D,i,t.RGB16F,n.width(),n.height(),0,t.RGB,t.FLOAT,Fe(n))}G=i}),promises.push(finished_promise),await Promise.all(promises)}().then(k).then(Rt),Tt()},window.light=function(t,e){l.push(new nt(t,e))},window.material=function(t,e,i,n,r,s){c.push(new Y(t,e,i,n,r,s))},window.patch=function(t,e,i,n){h.push(new vt(t,e,i,n))},window.curve=function(t,e,i){h.push(new wt(t,e,i))},window.pixel=function(t,e,i){h.push(new Mt(t,e,i))},window.triangles=function(t,e){h.push(new bt(t,e)),window.Positions=F=[],window.Normals=z=[],window.Colors=H=[],window.Indices=X=[]},window.sphere=function(t,e,i,n,r){let s,a,o,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,x=.0549670512339254,g=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,Ce,0],[1,Ce,m],[f,Ce*f,u],[p,Ce*p,v],[Ce,1,0],[Ce,1,m],[Ce*f,f,u],[Ce*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,Ce*p,v],[x,0,g],[Ce*p,p,v],[w,w,1],[.05*Ce,0,1],[0,p,v],[0,x,g],[0,.05*Ce,1],[0,0,1]]],b=new Ve(t,r);function R(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let n=t[i];e[i]=c([s*n[0],a*n[1],o*n[2]])}return e}r?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let T=Be(c,[-e,-e,d],[e,e,e]),y=T[0],A=T[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){a=t*e;for(let t=l;t<=1;t+=2){o=t*e;for(let t=0;t<2;++t)h.push(new vt(R(M[t]),i,n,null,y,A))}}}},window.disk=function(t,e,i,n,r){let s=1-2*Ce/3,a=[[1,0,0],[1,-Ce,0],[Ce,-1,0],[0,-1,0],[1,Ce,0],[s,0,0],[0,-s,0],[-Ce,-1,0],[Ce,1,0],[0,s,0],[-s,0,0],[-1,-Ce,0],[0,1,0],[-Ce,1,0],[-1,Ce,0],[-1,0,0]],o=new Ve(t,r),l=Be(o.T.bind(o),[-e,-e,0],[e,e,0]);h.push(new vt(function(t){let i=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];i[n]=o.T([e*r[0],e*r[1],0])}return i}(a),i,n,null,l[0],l[1]))},window.cylinder=function(t,e,i,n,r,s,a){let o,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,Ce,0],[1,Ce,1/3],[1,Ce,2/3],[1,Ce,1],[Ce,1,0],[Ce,1,1/3],[Ce,1,2/3],[Ce,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Ve(t,s);function m(t){let e=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];e[n]=d.T([o*r[0],l*r[1],i*r[2]])}return e}let f=Be(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){o=t*e;for(let t=-1;t<=1;t+=2)l=t*e,h.push(new vt(m(c),n,r,null,u,p))}if(a){let e=d.T([0,0,i]);h.push(new wt([t,e],n,r,t,e))}},window.tube=function(t,e,i,n,r){let s=function(t,e,i,n,r){class s{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=Bt(i,e)}}let a=Number.EPSILON*Math.max(Ut(t),Ut(e),Ut(i),Ut(n));function o(r){if(1==r){let r=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Ut(r)>a?St(r):(r=[2*i[0]-e[0]-n[0],2*i[1]-e[1]-n[1],2*i[2]-e[2]-n[2]],Ut(r)>a?St(r):[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])}let s=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[s[0]*l+o[0]*r+h[0],s[1]*l+o[1]*r+h[1],s[2]*l+o[2]*r+h[2]];return Ut(c)>a?St(c):(l=2*r,c=[s[0]*l+o[0],s[1]*l+o[1],s[2]*l+o[2]],Ut(c)>a?St(c):St(s))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];Ut(l)<a&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],Ut(l)<a&&(l=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])),l=St(l);let c=function(t){let e=Bt(t,[0,1,0]),i=Number.EPSILON*Ut(t);return Ut(e)>i?St(e):(e=Bt(t,[0,0,1]),Ut(e)>i?St(e):[1,0,0])}(l);h[0]=new s(t,c,l);for(let a=1;a<r.length;++a){let l=h[a-1],c=r[a],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*n[0],f*t[1]+m*e[1]+d*i[1]+p*n[1],f*t[2]+m*e[2]+d*i[2]+p*n[2]],x=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=x[0]||0!=x[1]||0!=x[2]){let t=l.r,e=St(x),i=l.t,n=Vt(e,i),r=[i[0]-2*n*e[0],i[1]-2*n*e[1],i[2]-2*n*e[2]];i=o(c);let d=2*Vt(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=St([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*Vt(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[a]=new s(v,St(m),St(i))}else h[a]=h[a-1]}return h}(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),a=Ce*e,o=[[e,0],[e,a],[a,e],[0,e]];function l(e,r,a,l){let c=Array(16);for(let i=0;i<4;++i){let n=s[i],h=n.r[0],d=n.s[0],m=h*e+d*r,f=h*a+d*l;h=n.r[1],d=n.s[1];let u=h*e+d*r,p=h*a+d*l;h=n.r[2],d=n.s[2];let v=h*e+d*r,x=h*a+d*l,g=t[i],w=g[0];w1=g[1],w2=g[2];for(let t=0;t<4;++t){let e=o[t],n=e[0],r=e[1];c[4*i+t]=[m*n+f*r+w,u*n+p*r+w1,v*n+x*r+w2]}}h.push(new vt(c,i,n))}l(1,0,0,1),l(0,-1,1,0),l(-1,0,0,-1),l(0,1,-1,0),r&&h.push(new wt(t,i,n))},window.Positions=F,window.Normals=z,window.Colors=H,window.Indices=X}();
diff --git a/graphics/asymptote/bezierpatch.cc b/graphics/asymptote/bezierpatch.cc
index 775c282e0c..29ef5c28c5 100644
--- a/graphics/asymptote/bezierpatch.cc
+++ b/graphics/asymptote/bezierpatch.cc
@@ -800,7 +800,6 @@ void Triangles::queue(size_t nP, const triple* P, size_t nN, const triple* N,
notRendered();
data.Vertices.resize(nP);
- data.indices.resize(3*nI);
MaterialIndex=nC ? -1-materialIndex : 1+materialIndex;
@@ -824,7 +823,7 @@ void Triangles::queue(size_t nP, const triple* P, size_t nN, const triple* N,
(GLfloat) C1.A};
GLfloat c2[]={(GLfloat) C2.R,(GLfloat) C2.G,(GLfloat) C2.B,
(GLfloat) C2.A};
- transparent |= c0[3]+c1[3]+c2[3] < 765;
+ transparent |= c0[3]+c1[3]+c2[3] < 3.0;
data.Vertices[PI0]=VertexData(P0,N[NI[0]],c0);
data.Vertices[PI1]=VertexData(P1,N[NI[1]],c1);
data.Vertices[PI2]=VertexData(P2,N[NI[2]],c2);
@@ -834,11 +833,11 @@ void Triangles::queue(size_t nP, const triple* P, size_t nN, const triple* N,
data.Vertices[PI2]=VertexData(P2,N[NI[2]]);
}
triple Q[]={P0,P1,P2};
+ std::vector<GLuint> &q=data.indices;
if(!offscreen(3,Q)) {
- size_t i3=3*i;
- data.indices[i3]=PI0;
- data.indices[i3+1]=PI1;
- data.indices[i3+2]=PI2;
+ q.push_back(PI0);
+ q.push_back(PI1);
+ q.push_back(PI2);
}
}
append();
diff --git a/graphics/asymptote/camp.l b/graphics/asymptote/camp.l
index b62de16f5c..b4074058e8 100644
--- a/graphics/asymptote/camp.l
+++ b/graphics/asymptote/camp.l
@@ -168,7 +168,7 @@ void reportEOF() {
assert(eof);
error();
em << eofMessage;
- em.sync();
+ em.sync(true);
}
position stringpos; // The position of the start of the string.
diff --git a/graphics/asymptote/camperror.cc b/graphics/asymptote/camperror.cc
index f124e85d78..945b3ede5e 100644
--- a/graphics/asymptote/camperror.cc
+++ b/graphics/asymptote/camperror.cc
@@ -22,7 +22,7 @@ void reportError(const string& desc)
{
em.runtime(vm::getPos());
em << desc;
- em.sync();
+ em.sync(true);
throw handled_error();
}
@@ -31,14 +31,14 @@ void reportWarning(const string& desc)
{
em.warning(vm::getPos());
em << desc;
- em.sync();
+ em.sync(true);
}
void reportFatal(const string& desc)
{
em.fatal(vm::getPos());
em << desc;
- em.sync();
+ em.sync(true);
em.statusError();
try {
throw quit();
diff --git a/graphics/asymptote/configure b/graphics/asymptote/configure
index 38dd93bbb9..ab27d595a3 100755
--- a/graphics/asymptote/configure
+++ b/graphics/asymptote/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for Asymptote 2.90.
+# Generated by GNU Autoconf 2.71 for Asymptote 2.91.
#
# Report bugs to <https://github.com/vectorgraphics/asymptote/issues>.
#
@@ -611,8 +611,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Asymptote'
PACKAGE_TARNAME='asymptote'
-PACKAGE_VERSION='2.90'
-PACKAGE_STRING='Asymptote 2.90'
+PACKAGE_VERSION='2.91'
+PACKAGE_STRING='Asymptote 2.91'
PACKAGE_BUGREPORT='https://github.com/vectorgraphics/asymptote/issues'
PACKAGE_URL=''
@@ -1326,7 +1326,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Asymptote 2.90 to adapt to many kinds of systems.
+\`configure' configures Asymptote 2.91 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1392,7 +1392,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Asymptote 2.90:";;
+ short | recursive ) echo "Configuration of Asymptote 2.91:";;
esac
cat <<\_ACEOF
@@ -1508,7 +1508,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Asymptote configure 2.90
+Asymptote configure 2.91
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1988,7 +1988,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Asymptote $as_me 2.90, which was
+It was created by Asymptote $as_me 2.91, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -10569,7 +10569,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Asymptote $as_me 2.90, which was
+This file was extended by Asymptote $as_me 2.91, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -10633,7 +10633,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-Asymptote config.status 2.90
+Asymptote config.status 2.91
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/graphics/asymptote/configure.ac b/graphics/asymptote/configure.ac
index 7e6dd1aaa1..a3d7474546 100644
--- a/graphics/asymptote/configure.ac
+++ b/graphics/asymptote/configure.ac
@@ -3,7 +3,7 @@
# this file.
AC_PREREQ(2)
-AC_INIT([Asymptote],[2.90],[https://github.com/vectorgraphics/asymptote/issues])
+AC_INIT([Asymptote],[2.91],[https://github.com/vectorgraphics/asymptote/issues])
VERSION=$PACKAGE_VERSION
AC_SUBST(VERSION)
m4_include([ax_pthread.m4])
diff --git a/graphics/asymptote/dec.cc b/graphics/asymptote/dec.cc
index d969ac5f02..8b48479485 100644
--- a/graphics/asymptote/dec.cc
+++ b/graphics/asymptote/dec.cc
@@ -212,7 +212,7 @@ bool block::transAsTemplatedField(
if (!dec) {
em.error(getPos());
em << "expected 'typedef import(<types>);'";
- em.sync();
+ em.sync(true);
return false;
}
if(!dec->transAsParamMatcher(e, r, args, caller))
@@ -888,7 +888,7 @@ varEntry *accessModule(position pos, coenv &e, record *r, symbol id)
if (!imp) {
em.error(pos);
em << "could not load module '" << filename << "'";
- em.sync();
+ em.sync(true);
return 0;
}
else {
@@ -923,7 +923,7 @@ varEntry *accessTemplatedModule(position pos, coenv &e, record *r, symbol id,
if (theName == symbol::nullsym) {
em.error(theType->getPos());
em << "expected typename=";
- em.sync();
+ em.sync(true);
return nullptr;
}
computedArgs->push_back(new namedTyEntry(
@@ -935,7 +935,7 @@ varEntry *accessTemplatedModule(position pos, coenv &e, record *r, symbol id,
if (!imp) {
em.error(pos);
em << "could not load module '" << id << "'";
- em.sync();
+ em.sync(true);
return nullptr;
}
else {
@@ -1246,7 +1246,7 @@ void receiveTypedefDec::transAsField(coenv& e, record *r) {
} else {
em << "templated module access requires template parameters";
}
- em.sync();
+ em.sync(true);
}
@@ -1375,7 +1375,7 @@ void includedec::loadFailed(coenv &)
{
em.warning(getPos());
em << "could not parse file of name '" << filename << "'";
- em.sync();
+ em.sync(true);
}
void includedec::transAsField(coenv &e, record *r)
diff --git a/graphics/asymptote/doc/CAD.pdf b/graphics/asymptote/doc/CAD.pdf
index 819509abff..f9f1b32c49 100644
--- a/graphics/asymptote/doc/CAD.pdf
+++ b/graphics/asymptote/doc/CAD.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/FAQ/asy-faq.info b/graphics/asymptote/doc/FAQ/asy-faq.info
index e66a938dae..af568c7b23 100644
--- a/graphics/asymptote/doc/FAQ/asy-faq.info
+++ b/graphics/asymptote/doc/FAQ/asy-faq.info
@@ -10,7 +10,7 @@ END-INFO-DIR-ENTRY
File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
ASYMPTOTE FREQUENTLY ASKED QUESTIONS
- 2024-06-21
+ 2024-08-15
This is the list of Frequently Asked Questions about Asymptote (asy).
diff --git a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
index de1fb5b2da..b996dcb3bb 100644
--- a/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
+++ b/graphics/asymptote/doc/TeXShopAndAsymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asy-latex.pdf b/graphics/asymptote/doc/asy-latex.pdf
index e09c0b928e..94469b45fb 100644
--- a/graphics/asymptote/doc/asy-latex.pdf
+++ b/graphics/asymptote/doc/asy-latex.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asy.1 b/graphics/asymptote/doc/asy.1
index d2686af927..ca1a45e120 100644
--- a/graphics/asymptote/doc/asy.1
+++ b/graphics/asymptote/doc/asy.1
@@ -109,7 +109,7 @@ Compress images in PDF output [true].
-convertOptions str []
.TP
.B \-d,\-debug
-Enable debugging messages [false].
+Enable debugging messages and traceback [false].
.TP
.B \-devicepixelratio n
Ratio of physical to logical pixels [1].
diff --git a/graphics/asymptote/doc/asyRefCard.pdf b/graphics/asymptote/doc/asyRefCard.pdf
index dcfb6417e4..1a15def5a7 100644
--- a/graphics/asymptote/doc/asyRefCard.pdf
+++ b/graphics/asymptote/doc/asyRefCard.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.pdf b/graphics/asymptote/doc/asymptote.pdf
index a5de59f7c4..75e8cc5b99 100644
--- a/graphics/asymptote/doc/asymptote.pdf
+++ b/graphics/asymptote/doc/asymptote.pdf
Binary files differ
diff --git a/graphics/asymptote/doc/asymptote.texi b/graphics/asymptote/doc/asymptote.texi
index f37789114f..12e125fbf3 100644
--- a/graphics/asymptote/doc/asymptote.texi
+++ b/graphics/asymptote/doc/asymptote.texi
@@ -201,7 +201,7 @@ Labels and equations are typeset with @code{LaTeX}, for overall document
consistency, yielding the same high-quality level of typesetting that
@code{LaTeX} provides for scientific text. By default it produces
@code{PostScript} output, but it can also generate @code{OpenGL}, @code{PDF},
-@code{SVG}, @code{WebGL}, @code{V3D}, and @code{PRC} vector graphics,
+@code{SVG}, @code{WebGL}, @code{V3D}, and legacy @code{PRC} vector graphics,
along with any format that the @code{ImageMagick} package can
produce. You can even try it out in your Web browser without
installing it, using the @code{Asymptote Web Application}
@@ -1460,9 +1460,10 @@ In the second form, the elements of @code{z} are taken to be successive
nodes of path @code{g}. The pens in @code{p} must belong to the same
color space. Illustrations of Gouraud shading are provided in the example file
@code{@uref{https://asymptote.sourceforge.io/gallery/PDFs/Gouraud.pdf,,Gouraud}@uref{https://asymptote.sourceforge.io/gallery/PDFs/Gouraud.asy,,.asy}}.
-The edge flags used in Gouraud shading are documented here:
+The edge flags used in Gouraud shading are documented on pages 270--274
+of the PostScript Language Reference (3rd edition):
@quotation
-@url{https://www.adobe.com/content/dam/acom/en/devnet/postscript/pdfs/TN5600.SmoothShading.pdf}
+@url{https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf}
@end quotation
@cindex Coons shading
@@ -1798,7 +1799,7 @@ it approximates a straight line.
@cindex @code{and}
@cindex @code{atleast}
One can change the spline tension from its default value of 1 to any
-real value greater than or equal to 0.75 (cf. John D. Hobby, Discrete and
+real value greater than or equal to 0.75 (see John D. Hobby, Discrete and
Computational Geometry 1, 1986):
@verbatim
draw((100,0)..tension 2 ..(100,100)..(0,100));
@@ -3913,8 +3914,10 @@ that can be used for importing @code{LaTeX} packages.
@end table
+@anchor{deferred drawing}
@node Deferred drawing
@section Deferred drawing
+@cindex deferred drawing
It is sometimes desirable to have elements of a fixed absolute size,
independent of the picture scaling from user to
@code{PostScript} coordinates.
@@ -5234,7 +5237,9 @@ function (equivalent to @code{fabs(real)}), an @code{abs(pair)} function
@cindex @code{histogram}
@cindex @code{factorial}
@cindex @code{choose}
-Random numbers can be seeded with @code{srand(int)} and generated with
+Random numbers can be seeded with @code{srand(int)}
+(for example, with @code{srand(round((cputime().parent.clock%1)*1e9))})
+and generated with
the @code{int rand()} function, which returns a random integer between 0
and the integer @code{randMax}. The @code{unitrand()} function returns
a random number uniformly distributed in the interval [0,1].
@@ -6649,7 +6654,6 @@ option to disable this feature.
@node simplex, math, plain, Base modules
@section @code{simplex}
@cindex @code{simplex}
-@cindex @code{deferred drawing}
This module solves the general linear programming problem using the
simplex method.
@@ -6658,7 +6662,8 @@ simplex method.
@cindex @code{simplex2}
@cindex @code{deferred drawing}
This module solves a special case of the two-variable linear programming
-problem used by the module @code{plain} for automatic sizing of pictures.
+problem used by the module @code{plain} for automatic sizing of
+pictures (@pxref{deferred drawing}).
@node math, interpolate, simplex, Base modules
@section @code{math}
@@ -6863,11 +6868,9 @@ This module creates a struct parameterized by the types specified in
strings @code{key} and @code{value}, mapping keys to values with a
specified default:
@verbatim
-import map;
-
-mapTemplate(name="map",key="string",value="int",default="-1");
+from map(Key=string, Value=int) access map;
-map M;
+map M=map(Default=-1);
M.add("z",2);
M.add("a",3);
@@ -8087,7 +8090,7 @@ dimensions except that triples @code{(x,y,z)} are used in place of pairs
generalization of John Hobby's spline algorithm is shape-invariant under
three-dimensional rotation, scaling, and shifting, and reduces in the
planar case to the two-dimensional algorithm used in @code{Asymptote},
-@code{MetaPost}, and @code{MetaFont} [cf.@ J. C. Bowman, Proceedings in
+@code{MetaPost}, and @code{MetaFont} [see J. C. Bowman, Proceedings in
Applied Mathematics and Mechanics, 7:1, 2010021-2010022 (2007)].
For example, a unit circle in the @math{XY} plane may be filled and
@@ -8204,6 +8207,21 @@ other formats. One can request a completely transparent background for
3D @code{WebGL} images with
@code{currentlight.background=black+opacity(0.0);}
+@code{render}
+
+A function @code{render()} may be assigned to the optional
+@code{render} parameter allows one to pass specialized rendering
+options to the surface drawing routines, via arguments such as:
+@verbatim
+ bool tessellate; // use tessellated mesh to store straight patches
+ real margin; // shrink amount for rendered OpenGL viewport, in bp.
+ bool partnames; // assign part name indices to compound objects
+ bool defaultnames; // assign default names to unnamed objects
+ interaction interaction; // billboard interaction mode
+@end verbatim
+along with the rendering parameters for the legacy @acronym{PRC} format
+described in @code{three.asy}.
+
@cindex image-based lighting
@cindex @code{surface}
@cindex @code{ibl}
@@ -8235,7 +8253,7 @@ The examples @code{@uref{https://asymptote.sourceforge.io/gallery/3Dwebgl/vertex
vertex-dependent colors, which are supported by
@code{Asymptote}'s native @code{OpenGL}/@code{WebGL} renderers
and the two-dimensional vector output format (@code{settings.render=0}). Since
-the @acronym{PRC} output format does not currently support vertex
+the legacy @acronym{PRC} output format does not support vertex
shading of Bezier surfaces, @acronym{PRC} patches are shaded with the mean of the four vertex colors.
@cindex @code{surface}
@@ -8449,7 +8467,7 @@ with the setting @code{iconify=true}.
@cindex @code{prc}
@cindex @code{views}
-@item Embed the 3D @acronym{PRC} format in a @acronym{PDF} file
+@item Embed the 3D legacy @acronym{PRC} format in a @acronym{PDF} file
and view the resulting @acronym{PDF} file with
version @code{9.0} or later of @code{Adobe Reader}.
This requires @code{settings.outformat="pdf"} and @code{settings.prc=true},
@@ -8510,7 +8528,7 @@ this approach (@pxref{PostScript3D}).
@end enumerate
-@cindex @code{double deferred drawing}
+@cindex double deferred drawing
Automatic picture sizing in three dimensions is accomplished with double
deferred drawing. The maximal desired dimensions of the scene in each of
the three dimensions can optionally be specified with the routine
@@ -8644,7 +8662,7 @@ positive @math{y} axis is drawn at this angle in degrees.
@cindex @code{target}
@cindex @code{showtarget}
@cindex @code{center}
-@item orthographic(triple camera, triple up=Z, triple target=O, @*@ @ @ @ @ @ @ @ @ @ @ @ @ real zoom=1, pair viewportshift=0, bool showtarget=true, @*@ @ @ @ @ @ @ @ @ @ @ @ @ bool center=false)
+@item orthographic(triple camera, triple up=Z, triple target=O, @*@ @ @ @ @ @ @ @ @ @ @ @ @ real zoom=1, pair viewportshift=0, bool showtarget=true, @*@ @ @ @ @ @ @ @ @ @ @ @ @ bool center=true)
This projects from three to two dimensions using the view as seen at a point
infinitely far away in the direction @code{unit(camera)}, orienting the camera
so that, if possible, the vector @code{up} points upwards. Parallel
@@ -8653,7 +8671,7 @@ to include @code{target} if @code{showtarget=true}.
If @code{center=true}, the target will be adjusted to the center of the
bounding volume.
-@item orthographic(real x, real y, real z, triple up=Z, triple target=O, @*@ @ @ @ @ @ @ @ @ @ @ @ @ real zoom=1, pair viewportshift=0, bool showtarget=true, @*@ @ @ @ @ @ @ @ @ @ @ @ @ bool center=false)
+@item orthographic(real x, real y, real z, triple up=Z, triple target=O, @*@ @ @ @ @ @ @ @ @ @ @ @ @ real zoom=1, pair viewportshift=0, bool showtarget=true, @*@ @ @ @ @ @ @ @ @ @ @ @ @ bool center=true)
This is equivalent to
@verbatim
orthographic((x,y,z),up,target,zoom,viewportshift,showtarget,center)
@@ -8671,7 +8689,6 @@ at angle @code{beta}, and the @math{z} axis up.
@cindex @code{autoadjust}
@item perspective(triple camera, triple up=Z, triple target=O, @*@ @ @ @ @ @ @ @ @ @ @ @ real zoom=1, real angle=0, pair viewportshift=0, @*@ @ @ @ @ @ @ @ @ @ @ @ bool showtarget=true, bool autoadjust=true, @*@ @ @ @ @ @ @ @ @ @ @ @ bool center=autoadjust)
@cindex @code{perspective}
-@cindex @code{NURBS}
This projects from three to two dimensions, taking account of
perspective, as seen from the location @code{camera} looking at @code{target},
orienting the camera so that, if possible, the vector @code{up} points upwards.
@@ -9108,7 +9125,9 @@ To draw an @math{x} axis in three dimensions, use the routine
@verbatim
void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
real xmin=-infinity, real xmax=infinity, pen p=currentpen,
- ticks3 ticks=NoTicks3, arrowbar3 arrow=None, bool above=false);
+ ticks3 ticks=NoTicks3, arrowbar3 arrow=None,
+ margin3 margin=NoMargin3, bool above=false,
+ projection P=currentprojection);
@end verbatim
@noindent
Analogous routines @code{yaxis} and @code{zaxis} can be used to draw
@@ -9120,7 +9139,8 @@ void axes3(picture pic=currentpicture,
bool extend=false,
triple min=(-infinity,-infinity,-infinity),
triple max=(infinity,infinity,infinity),
- pen p=currentpen, arrowbar3 arrow=None);
+ pen p=currentpen, arrowbar3 arrow=None,
+ margin3 margin=NoMargin3, projection P=currentprojection);
@end verbatim
@cindex @code{YZEquals}
@@ -10480,7 +10500,7 @@ developed the @code{Asymptote Web Application} hosted at
@c LocalWords: NoZero NoZeroFormat abbrevation gsOptions namespace redeclared
@c LocalWords: atLeast intMin globalwrite quarticroots deconsruct substrings
@c LocalWords: usleep currentpatterns trailingzero Orest Shardt DefaultHead
-@c LocalWords: SimpleHead HookHead TeXHead multipage NURBS inlinemovie dxmax
+@c LocalWords: SimpleHead HookHead TeXHead multipage inlinemovie dxmax
@c LocalWords: simpson NoBox truesize autoscale shadestroke recurses mintimes
@c LocalWords: nonoverlapping texengine maxtimes maxheight pdb TEXMFCONFIG Jn
@c LocalWords: piecewisestraight unitrand graphmarkers antialias nolight newl
diff --git a/graphics/asymptote/doc/axis3.asy b/graphics/asymptote/doc/axis3.asy
index 90cbdc6ad0..c7c90ae79d 100644
--- a/graphics/asymptote/doc/axis3.asy
+++ b/graphics/asymptote/doc/axis3.asy
@@ -3,7 +3,7 @@ import graph3;
size(0,200);
size3(200,IgnoreAspect);
-currentprojection=perspective(5,2,2);
+currentprojection=perspective(dir(75,20));
scale(Linear,Linear,Log);
diff --git a/graphics/asymptote/doc/extra/intro.asy b/graphics/asymptote/doc/extra/intro.asy
index 8fe021e0ec..bb23c87f16 100644
--- a/graphics/asymptote/doc/extra/intro.asy
+++ b/graphics/asymptote/doc/extra/intro.asy
@@ -1,7 +1,7 @@
-orientation=Landscape;
-
settings.tex="pdflatex";
+orientation=Landscape;
+
import slide;
import three;
import animate;
@@ -10,14 +10,15 @@ bool long=true;
usepackage("mflogo");
-usersetting();
-
viewportsize=pagewidth-2pagemargin;
-// To generate bibliographic references:
+usersetting();
+
+// Commands to generate optional bibtex citations:
// asy -k intro
-// bibtex intro_
+// bibtex intro_
// asy -k intro
+
bibliographystyle("alpha");
itempen=fontsize(22pt);
@@ -30,7 +31,7 @@ titlepage(long ? "Asymptote: The Vector Graphics Language" :
"Department of Mathematical and Statistical Sciences\\
University of Alberta\\
%and Instituto Nacional de Matem\'atica Pura e Aplicada (IMPA)
-\medskip\Green{Collaborators: Orest Shardt, Michail Vidiassov}",
+\smallskip\Green{Collaborators: Orest Shardt, Michail Vidiassov}",
"June 30, 2010",
"https://asymptote.sourceforge.io/intro.pdf");
@@ -196,6 +197,7 @@ draw(g--cycle,dashed);
add(output, currentpicture.fit(), (+0.5inch, 0), E);
restore();
+erase(); // Suppress implicit shipout of currentpicture.
shipout(output);
"));
@@ -350,7 +352,7 @@ item("The resulting shape may be adjusted by modifying optional {\it tension\/}
title("Hobby's 2D Control Point Algorithm");
item("Having prescribed outgoing and incoming path directions $e^{i\theta}$
at node~$z_0$ and $e^{i\phi}$ at node $z_1$ relative to the
-vector $z_1-z_0$, the control points are determined as:");
+vector $z_1-z_0$, the control points are determined as:");
equations("u&=&z_0+e^{i\theta}(z_1-z_0)f(\theta,-\phi),\nonumber\\
v&=&z_1-e^{i\phi}(z_1-z_0)f(-\phi,\theta),");
@@ -390,7 +392,7 @@ item("Must reduce to 2D algorithm in planar case.");
item("Determine directions by applying Hobby's algorithm in the plane containing $z_{k-1}$, $z_k$, $z_{k+1}$.");
// Reformulate Hobby's equations in terms of the angle $\psi_k=$
-item("The only ambiguity that can arise is the overall sign of the angles, which relates to viewing each 2D plane from opposing normal directions.");
+item("The only ambiguity that can arise is the overall sign of the angles, which relates to viewing each 2D plane from opposing normal directions.");
item("A reference vector based on the mean unit normal of successive segments can be used to resolve such ambiguities \cite{Bowman07,Bowman09}");
@@ -436,65 +438,15 @@ title("Smooth 3D surfaces");
asyinclude("../examples/sinc",25cm);
title("Curved 3D Arrows");
-asyinclude("../examples/arrows3",20cm);
+asyinclude("../examples/arrows3",16cm);
title("Slide Presentations");
item("Asymptote has a module for preparing slides.");
-item("It even supports embedded high-resolution PDF movies.");
code('
title("Slide Presentations");
item("Asymptote has a module for preparing slides.");
-item("It even supports embedded high-resolution PDF movies.");
');
-remark("\quad\ldots");
-
-import graph;
-
-pen p=linewidth(1);
-pen dotpen=linewidth(5);
-
-pair wheelpoint(real t) {return (t+cos(t),-sin(t));}
-
-guide wheel(guide g=nullpath, real a, real b, int n)
-{
- real width=(b-a)/n;
- for(int i=0; i <= n; ++i) {
- real t=a+width*i;
- g=g--wheelpoint(t);
- }
- return g;
-}
-
-real t1=0;
-real t2=t1+2*pi;
-
-picture base;
-draw(base,circle((0,0),1),p);
-draw(base,wheel(t1,t2,100),p+linetype("0 2"));
-yequals(base,Label("$y=-1$",1.0),-1,extend=true,p+linetype("4 4"));
-xaxis(base,Label("$x$",align=3SW),0,p);
-yaxis(base,"$y$",0,1.3,p);
-pair z1=wheelpoint(t1);
-pair z2=wheelpoint(t2);
-dot(base,z1,dotpen);
-dot(base,z2,dotpen);
-
-animation a;
-
-int n=25;
-real dt=(t2-t1)/n;
-for(int i=0; i <= n; ++i) {
- picture pic;
- size(pic,24cm);
- real t=t1+dt*i;
- add(pic,base);
- draw(pic,circle((t,0),1),p+red);
- dot(pic,wheelpoint(t),dotpen);
- a.add(pic);
-}
-
-display(a.pdf(delay=150,"controls"));
title("Automatic Sizing");
item("Figures can be specified in user coordinates, then
@@ -584,6 +536,7 @@ pen p=fontsize(30pt);
frame f;
label(f, \"$E=mc^2$\", p);
draw(f, box(min(f),max(f)));
+erase(); // Suppress implicit shipout of currentpicture.
shipout(f);
"));
@@ -681,7 +634,7 @@ item("Rest arguments allow one to write a function that takes an arbitrary
number of arguments:");
code("
int sum(... int[] nums) {
- int total=0;
+ int total=0;
for(int i=0; i < nums.length; ++i)
total += nums[i];
return total;
diff --git a/graphics/asymptote/doc/png/asymptote.info b/graphics/asymptote/doc/png/asymptote.info
index 672c1369bd..54b3a224ab 100644
--- a/graphics/asymptote/doc/png/asymptote.info
+++ b/graphics/asymptote/doc/png/asymptote.info
@@ -1,7 +1,7 @@
This is asymptote.info, produced by makeinfo version 7.1 from
asymptote.texi.
-This file documents ‘Asymptote’, version 2.90.
+This file documents ‘Asymptote’, version 2.91.
<https://asymptote.sourceforge.io>
@@ -22,7 +22,7 @@ File: asymptote.info, Node: Top, Next: Description, Prev: (dir), Up: (dir)
Asymptote
*********
-This file documents ‘Asymptote’, version 2.90.
+This file documents ‘Asymptote’, version 2.91.
<https://asymptote.sourceforge.io>
@@ -184,9 +184,9 @@ drawing. Labels and equations are typeset with ‘LaTeX’, for overall
document consistency, yielding the same high-quality level of
typesetting that ‘LaTeX’ provides for scientific text. By default it
produces ‘PostScript’ output, but it can also generate ‘OpenGL’, ‘PDF’,
-‘SVG’, ‘WebGL’, ‘V3D’, and ‘PRC’ vector graphics, along with any format
-that the ‘ImageMagick’ package can produce. You can even try it out in
-your Web browser without installing it, using the ‘Asymptote Web
+‘SVG’, ‘WebGL’, ‘V3D’, and legacy ‘PRC’ vector graphics, along with any
+format that the ‘ImageMagick’ package can produce. You can even try it
+out in your Web browser without installing it, using the ‘Asymptote Web
Application’
<http://asymptote.ualberta.ca>
@@ -1155,9 +1155,9 @@ void gouraudshade(picture pic=currentpicture, path g, bool stroke=false,
In the second form, the elements of ‘z’ are taken to be successive nodes
of path ‘g’. The pens in ‘p’ must belong to the same color space.
Illustrations of Gouraud shading are provided in the example file
-‘Gouraud.asy’. The edge flags used in Gouraud shading are documented
-here:
- <https://www.adobe.com/content/dam/acom/en/devnet/postscript/pdfs/TN5600.SmoothShading.pdf>
+‘Gouraud.asy’. The edge flags used in Gouraud shading are documented on
+pages 270-274 of the PostScript Language Reference (3rd edition):
+ <https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf>
Tensor product shading using clipping path ‘g’, fill rule ‘fillrule’
on patches bounded by the n cyclic paths of length 4 in path array ‘b’,
@@ -1419,7 +1419,7 @@ specifying direction, tension, and curl values.
The higher the tension, the straighter the curve is, and the more it
approximates a straight line. One can change the spline tension from
its default value of 1 to any real value greater than or equal to 0.75
-(cf. John D. Hobby, Discrete and Computational Geometry 1, 1986):
+(see John D. Hobby, Discrete and Computational Geometry 1, 1986):
draw((100,0)..tension 2 ..(100,100)..(0,100));
draw((100,0)..tension 3 and 2 ..(100,100)..(0,100));
draw((100,0)..tension atleast 2 ..(100,100)..(0,100));
@@ -4104,7 +4104,8 @@ its real argument as an integer (-1, 0, or 1).
(equivalent to ‘fabs(real)’), an ‘abs(pair)’ function (equivalent to
‘length(pair)’).
- Random numbers can be seeded with ‘srand(int)’ and generated with the
+ Random numbers can be seeded with ‘srand(int)’ (for example, with
+‘srand(round((cputime().parent.clock%1)*1e9))’) and generated with the
‘int rand()’ function, which returns a random integer between 0 and the
integer ‘randMax’. The ‘unitrand()’ function returns a random number
uniformly distributed in the interval [0,1]. A Gaussian random number
@@ -5332,7 +5333,8 @@ File: asymptote.info, Node: simplex2, Next: math, Prev: plain, Up: Base modu
==============
This module solves a special case of the two-variable linear programming
-problem used by the module ‘plain’ for automatic sizing of pictures.
+problem used by the module ‘plain’ for automatic sizing of pictures
+(*note deferred drawing::).

File: asymptote.info, Node: math, Next: interpolate, Prev: simplex, Up: Base modules
@@ -5511,11 +5513,9 @@ File: asymptote.info, Node: map, Next: tree, Prev: markers, Up: Base modules
This module creates a struct parameterized by the types specified in
strings ‘key’ and ‘value’, mapping keys to values with a specified
default:
-import map;
+from map(Key=string, Value=int) access map;
-mapTemplate(name="map",key="string",value="int",default="-1");
-
-map M;
+map M=map(Default=-1);
M.add("z",2);
M.add("a",3);
@@ -7061,7 +7061,7 @@ pairs ‘(x,y)’ for the nodes and direction specifiers. This
generalization of John Hobby's spline algorithm is shape-invariant under
three-dimensional rotation, scaling, and shifting, and reduces in the
planar case to the two-dimensional algorithm used in ‘Asymptote’,
-‘MetaPost’, and ‘MetaFont’ [cf. J. C. Bowman, Proceedings in Applied
+‘MetaPost’, and ‘MetaFont’ [see J. C. Bowman, Proceedings in Applied
Mathematics and Mechanics, 7:1, 2010021-2010022 (2007)].
For example, a unit circle in the XY plane may be filled and drawn
@@ -7151,6 +7151,19 @@ transparent for all other formats. One can request a completely
transparent background for 3D ‘WebGL’ images with
‘currentlight.background=black+opacity(0.0);’
+ ‘render’
+
+ A function ‘render()’ may be assigned to the optional ‘render’
+parameter allows one to pass specialized rendering options to the
+surface drawing routines, via arguments such as:
+ bool tessellate; // use tessellated mesh to store straight patches
+ real margin; // shrink amount for rendered OpenGL viewport, in bp.
+ bool partnames; // assign part name indices to compound objects
+ bool defaultnames; // assign default names to unnamed objects
+ interaction interaction; // billboard interaction mode
+ along with the rendering parameters for the legacy PRC format
+described in ‘three.asy’.
+
Asymptote also supports image-based lighting with the setting
‘settings.ibl=true’. This uses pre-rendered EXR images from the
directory specified by ‘-imageDir’ (which defaults to ‘ibl’) or, for
@@ -7171,7 +7184,7 @@ how to draw a surface with patch-dependent colors. The examples
‘vertexshading.asy’ and ‘smoothelevation.asy’ illustrate
vertex-dependent colors, which are supported by ‘Asymptote’'s native
‘OpenGL’/‘WebGL’ renderers and the two-dimensional vector output format
-(‘settings.render=0’). Since the PRC output format does not currently
+(‘settings.render=0’). Since the legacy PRC output format does not
support vertex shading of Bezier surfaces, PRC patches are shaded with
the mean of the four vertex colors.
@@ -7326,18 +7339,18 @@ There are six choices for viewing 3D ‘Asymptote’ output:
batch mode (‘-noV’) rendering in an iconified window; this can be
enabled with the setting ‘iconify=true’.
- 4. Embed the 3D PRC format in a PDF file and view the resulting PDF
- file with version ‘9.0’ or later of ‘Adobe Reader’. This requires
- ‘settings.outformat="pdf"’ and ‘settings.prc=true’, which can be
- specified by the command-line options ‘-f pdf’ and ‘-f prc’, put in
- the ‘Asymptote’ configuration file (*note configuration file::), or
- specified in the script before module ‘three’ (or ‘graph3’) is
- imported. The ‘media9’ LaTeX package is also required (*note
- embed::). The example ‘100d.asy’ illustrates how one can generate
- a list of predefined views (see ‘100d.views’). A stationary
- preview image with a resolution of ‘n’ pixels per ‘bp’ can be
- embedded with the setting ‘render=n’; this allows the file to be
- viewed with other ‘PDF’ viewers. Alternatively, the file
+ 4. Embed the 3D legacy PRC format in a PDF file and view the resulting
+ PDF file with version ‘9.0’ or later of ‘Adobe Reader’. This
+ requires ‘settings.outformat="pdf"’ and ‘settings.prc=true’, which
+ can be specified by the command-line options ‘-f pdf’ and ‘-f prc’,
+ put in the ‘Asymptote’ configuration file (*note configuration
+ file::), or specified in the script before module ‘three’ (or
+ ‘graph3’) is imported. The ‘media9’ LaTeX package is also required
+ (*note embed::). The example ‘100d.asy’ illustrates how one can
+ generate a list of predefined views (see ‘100d.views’). A
+ stationary preview image with a resolution of ‘n’ pixels per ‘bp’
+ can be embedded with the setting ‘render=n’; this allows the file
+ to be viewed with other ‘PDF’ viewers. Alternatively, the file
‘externalprc.tex’ illustrates how the resulting PRC and rendered
image files can be extracted and processed in a separate ‘LaTeX’
file. However, see *note LaTeX usage:: for an easier way to embed
@@ -7454,7 +7467,7 @@ These projections to two dimensions are predefined:
‘orthographic(triple camera, triple up=Z, triple target=O,
real zoom=1, pair viewportshift=0, bool showtarget=true,
- bool center=false)’
+ bool center=true)’
This projects from three to two dimensions using the view as seen
at a point infinitely far away in the direction ‘unit(camera)’,
orienting the camera so that, if possible, the vector ‘up’ points
@@ -7465,7 +7478,7 @@ These projections to two dimensions are predefined:
‘orthographic(real x, real y, real z, triple up=Z, triple target=O,
real zoom=1, pair viewportshift=0, bool showtarget=true,
- bool center=false)’
+ bool center=true)’
This is equivalent to
orthographic((x,y,z),up,target,zoom,viewportshift,showtarget,center)
@@ -7776,7 +7789,9 @@ This module implements three-dimensional versions of the functions in
‘graph.asy’. To draw an x axis in three dimensions, use the routine
void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
real xmin=-infinity, real xmax=infinity, pen p=currentpen,
- ticks3 ticks=NoTicks3, arrowbar3 arrow=None, bool above=false);
+ ticks3 ticks=NoTicks3, arrowbar3 arrow=None,
+ margin3 margin=NoMargin3, bool above=false,
+ projection P=currentprojection);
Analogous routines ‘yaxis’ and ‘zaxis’ can be used to draw y and z axes
in three dimensions. There is also a routine for drawing all three
axis:
@@ -7785,7 +7800,8 @@ void axes3(picture pic=currentpicture,
bool extend=false,
triple min=(-infinity,-infinity,-infinity),
triple max=(infinity,infinity,infinity),
- pen p=currentpen, arrowbar3 arrow=None);
+ pen p=currentpen, arrowbar3 arrow=None,
+ margin3 margin=NoMargin3, projection P=currentprojection);
The predefined three-dimensional axis types are
axis YZEquals(real y, real z, triple align=O, bool extend=false);
@@ -7838,7 +7854,7 @@ import graph3;
size(0,200);
size3(200,IgnoreAspect);
-currentprojection=perspective(5,2,2);
+currentprojection=perspective(dir(75,20));
scale(Linear,Linear,Log);
@@ -8531,7 +8547,7 @@ Options (negate boolean options by replacing - with -no):
-compact Conserve memory at the expense of speed false
-compress Compress images in PDF output [true]
-convertOptions str []
--d,-debug Enable debugging messages [false]
+-d,-debug Enable debugging messages and traceback [false]
-devicepixelratio n Ratio of physical to logical pixels [1]
-digits n Default output file precision [7]
-divisor n Garbage collect using purge(divisor=n) [2]
@@ -9227,7 +9243,7 @@ Index
* 2D graphs: graph. (line 6)
* 3D graphs: graph3. (line 6)
* 3D grids: grid3. (line 6)
-* 3D PostScript: three. (line 665)
+* 3D PostScript: three. (line 678)
* a4: Configuring. (line 63)
* abort: Data types. (line 364)
* abs: Data types. (line 65)
@@ -9237,10 +9253,10 @@ Index
* abs2: Data types. (line 65)
* abs2 <1>: Data types. (line 144)
* absolute: Configuring. (line 38)
-* absolute <1>: three. (line 241)
+* absolute <1>: three. (line 254)
* accel: Paths and guides. (line 126)
* accel <1>: Paths and guides. (line 132)
-* accel <2>: three. (line 566)
+* accel <2>: three. (line 579)
* access: Import. (line 6)
* access <1>: Import. (line 45)
* acknowledgments: Credits. (line 6)
@@ -9254,15 +9270,15 @@ Index
(line 204)
* add <1>: Frames and pictures.
(line 218)
-* add <2>: three. (line 342)
-* addViews: three. (line 459)
+* add <2>: three. (line 355)
+* addViews: three. (line 472)
* adjust: Pens. (line 123)
* Ai: Mathematical functions.
- (line 48)
+ (line 49)
* Ai_deriv: Mathematical functions.
- (line 48)
+ (line 49)
* Airy: Mathematical functions.
- (line 48)
+ (line 49)
* alias: Structures. (line 62)
* alias <1>: Arrays. (line 183)
* Align: label. (line 20)
@@ -9279,22 +9295,22 @@ Index
* animation: animation. (line 6)
* animation <1>: animation. (line 6)
* annotate: annotate. (line 6)
-* antialias: three. (line 261)
+* antialias: three. (line 274)
* antialias <1>: Options. (line 188)
* append: Files. (line 38)
* append <1>: Arrays. (line 39)
* arc: Paths and guides. (line 24)
* Arc: Paths and guides. (line 37)
-* arc <1>: three. (line 353)
+* arc <1>: three. (line 366)
* ArcArrow: draw. (line 30)
-* ArcArrow3: three. (line 632)
+* ArcArrow3: three. (line 645)
* ArcArrows: draw. (line 30)
-* ArcArrows3: three. (line 632)
+* ArcArrows3: three. (line 645)
* arclength: Paths and guides. (line 153)
-* arclength <1>: three. (line 566)
+* arclength <1>: three. (line 579)
* arcpoint: Paths and guides. (line 163)
* arctime: Paths and guides. (line 157)
-* arctime <1>: three. (line 566)
+* arctime <1>: three. (line 579)
* arguments: Default arguments. (line 6)
* arithmetic operators: Arithmetic & logical.
(line 6)
@@ -9308,12 +9324,12 @@ Index
* arrow keys: Drawing in interactive mode.
(line 11)
* arrow keys <1>: GUI usage. (line 6)
-* Arrow3: three. (line 632)
+* Arrow3: three. (line 645)
* arrowbar: draw. (line 26)
* arrowhead: draw. (line 50)
* arrows: draw. (line 26)
* Arrows: draw. (line 26)
-* Arrows3: three. (line 632)
+* Arrows3: three. (line 645)
* as: Import. (line 67)
* ascii: Data types. (line 309)
* ascii <1>: Data types. (line 309)
@@ -9350,26 +9366,26 @@ Index
(line 263)
* attach <1>: LaTeX usage. (line 47)
* attach <2>: graph. (line 407)
-* autoadjust: three. (line 428)
+* autoadjust: three. (line 441)
* autoimport: Options. (line 155)
* automatic scaling: graph. (line 711)
* automatic scaling <1>: graph. (line 711)
* axialshade: fill. (line 43)
* axis: graph. (line 925)
* axis <1>: graph. (line 1007)
-* axis <2>: graph3. (line 66)
-* axis <3>: graph3. (line 82)
+* axis <2>: graph3. (line 69)
+* axis <3>: graph3. (line 85)
* azimuth: Data types. (line 154)
* babel: babel. (line 6)
* background: three. (line 76)
* background <1>: three. (line 97)
* background color: Frames and pictures.
(line 167)
-* BackView: three. (line 452)
+* BackView: three. (line 465)
* Bar: draw. (line 19)
-* Bar3: three. (line 632)
+* Bar3: three. (line 645)
* Bars: draw. (line 19)
-* Bars3: three. (line 632)
+* Bars3: three. (line 645)
* barsize: draw. (line 19)
* base modules: Base modules. (line 6)
* basealign: Pens. (line 181)
@@ -9378,38 +9394,38 @@ Index
(line 6)
* beep: Data types. (line 382)
* BeginArcArrow: draw. (line 30)
-* BeginArcArrow3: three. (line 632)
+* BeginArcArrow3: three. (line 645)
* BeginArrow: draw. (line 26)
-* BeginArrow3: three. (line 632)
+* BeginArrow3: three. (line 645)
* BeginBar: draw. (line 19)
-* BeginBar3: three. (line 632)
+* BeginBar3: three. (line 645)
* BeginDotMargin: draw. (line 87)
-* BeginDotMargin3: three. (line 648)
+* BeginDotMargin3: three. (line 661)
* BeginMargin: draw. (line 68)
-* BeginMargin3: three. (line 648)
+* BeginMargin3: three. (line 661)
* BeginPenMargin: draw. (line 76)
-* BeginPenMargin2: three. (line 648)
-* BeginPenMargin3: three. (line 648)
+* BeginPenMargin2: three. (line 661)
+* BeginPenMargin3: three. (line 661)
* BeginPoint: label. (line 62)
* Bessel: Mathematical functions.
- (line 48)
+ (line 49)
* bevel: flowchart. (line 72)
* beveljoin: Pens. (line 149)
* Bezier curves: Bezier curves. (line 6)
-* Bezier patch: three. (line 128)
-* Bezier triangle: three. (line 128)
-* bezulate: three. (line 146)
+* Bezier patch: three. (line 141)
+* Bezier triangle: three. (line 141)
+* bezulate: three. (line 159)
* Bi: Mathematical functions.
- (line 48)
+ (line 49)
* Bi_deriv: Mathematical functions.
- (line 48)
-* Billboard: three. (line 536)
+ (line 49)
+* Billboard: three. (line 549)
* binary: Files. (line 80)
* binary format: Files. (line 80)
* binary operators: Arithmetic & logical.
(line 6)
* binarytree: binarytree. (line 6)
-* black stripes: three. (line 261)
+* black stripes: three. (line 274)
* Blank: draw. (line 26)
* block.bottom: flowchart. (line 19)
* block.bottomleft: flowchart. (line 19)
@@ -9428,15 +9444,15 @@ Index
(line 6)
* Bottom: graph. (line 133)
* BottomTop: graph. (line 139)
-* BottomView: three. (line 452)
+* BottomView: three. (line 465)
* bounding box: Frames and pictures.
(line 167)
* bounds: palette. (line 43)
-* Bounds: graph3. (line 21)
+* Bounds: graph3. (line 24)
* box: Frames and pictures.
(line 117)
-* box <1>: three. (line 375)
-* box <2>: three. (line 377)
+* box <1>: three. (line 388)
+* box <2>: three. (line 390)
* bp: Drawing in batch mode.
(line 23)
* brace: Paths and guides. (line 51)
@@ -9452,7 +9468,7 @@ Index
* BWRainbow2: palette. (line 18)
* C string: Data types. (line 217)
* CAD: CAD. (line 6)
-* camera: three. (line 422)
+* camera: three. (line 435)
* casts: Casts. (line 6)
* cbrt: Mathematical functions.
(line 6)
@@ -9460,16 +9476,16 @@ Index
* ceil: Mathematical functions.
(line 26)
* Center: label. (line 67)
-* center: three. (line 405)
+* center: three. (line 418)
* checker: Pens. (line 338)
* Chinese: Pens. (line 297)
* choose: Mathematical functions.
(line 39)
* Ci: Mathematical functions.
- (line 48)
+ (line 49)
* circle: Paths and guides. (line 10)
* Circle: Paths and guides. (line 18)
-* circle <1>: three. (line 349)
+* circle <1>: three. (line 362)
* circle <2>: flowchart. (line 61)
* circlebarframe: markers. (line 18)
* CJK: Pens. (line 297)
@@ -9486,7 +9502,7 @@ Index
* cmyk: Pens. (line 38)
* colatitude: Data types. (line 159)
* color: Pens. (line 23)
-* color <1>: graph3. (line 133)
+* color <1>: graph3. (line 136)
* coloredNodes: tube. (line 25)
* coloredpath: tube. (line 18)
* coloredSegments: tube. (line 25)
@@ -9533,7 +9549,7 @@ Index
* cosh: Mathematical functions.
(line 6)
* cputime: Mathematical functions.
- (line 109)
+ (line 110)
* crop: graph. (line 640)
* cropping graphs: graph. (line 640)
* cross: Data types. (line 106)
@@ -9550,7 +9566,7 @@ Index
* curlSpecifier: Paths and guides. (line 409)
* currentlight: three. (line 76)
* currentpen: Pens. (line 6)
-* currentprojection: three. (line 449)
+* currentprojection: three. (line 462)
* curve: slopefield. (line 20)
* custom axis types: graph. (line 142)
* custom mark routine: graph. (line 578)
@@ -9562,7 +9578,7 @@ Index
* cyclic: Paths and guides. (line 85)
* cyclic <1>: Paths and guides. (line 377)
* cyclic <2>: Arrays. (line 39)
-* cyclic <3>: three. (line 566)
+* cyclic <3>: three. (line 579)
* Cyrillic: Pens. (line 291)
* dashdotted: Pens. (line 102)
* dashed: Pens. (line 102)
@@ -9576,7 +9592,7 @@ Index
* default arguments: Default arguments. (line 6)
* defaultformat: graph. (line 176)
* DefaultHead: draw. (line 50)
-* DefaultHead3: three. (line 632)
+* DefaultHead3: three. (line 645)
* defaultpen: Pens. (line 49)
* defaultpen <1>: Pens. (line 122)
* defaultpen <2>: Pens. (line 127)
@@ -9585,7 +9601,7 @@ Index
* defaultpen <5>: Pens. (line 416)
* defaultpen <6>: Pens. (line 440)
* defaultrender: three. (line 46)
-* deferred drawing: simplex. (line 6)
+* deferred drawing: Deferred drawing. (line 6)
* deferred drawing <1>: simplex2. (line 6)
* degrees: Data types. (line 78)
* degrees <1>: Mathematical functions.
@@ -9595,7 +9611,7 @@ Index
* delete: Files. (line 154)
* delete <1>: Arrays. (line 39)
* description: Description. (line 6)
-* devicepixelratio: three. (line 184)
+* devicepixelratio: three. (line 197)
* diagonal: Arrays. (line 324)
* diamond: flowchart. (line 54)
* diffuse: three. (line 76)
@@ -9605,7 +9621,7 @@ Index
* dir <1>: Data types. (line 90)
* dir <2>: Data types. (line 181)
* dir <3>: Paths and guides. (line 109)
-* dir <4>: three. (line 566)
+* dir <4>: three. (line 579)
* direction specifier: Bezier curves. (line 6)
* directory: Files. (line 26)
* dirSpecifier: Paths and guides. (line 391)
@@ -9620,18 +9636,18 @@ Index
* dot <3>: Arrays. (line 279)
* dot <4>: Arrays. (line 282)
* DotMargin: draw. (line 83)
-* DotMargin3: three. (line 648)
+* DotMargin3: three. (line 661)
* DotMargins: draw. (line 89)
-* DotMargins3: three. (line 648)
+* DotMargins3: three. (line 661)
* dotted: Pens. (line 102)
-* double deferred drawing: three. (line 327)
+* double deferred drawing: three. (line 340)
* double precision: Files. (line 80)
* draw: Drawing commands. (line 34)
* draw <1>: draw. (line 6)
* draw <2>: draw. (line 147)
* Draw: Frames and pictures.
(line 147)
-* draw <3>: three. (line 154)
+* draw <3>: three. (line 167)
* drawer: Deferred drawing. (line 31)
* drawing commands: Drawing commands. (line 6)
* drawline: math. (line 9)
@@ -9644,34 +9660,34 @@ Index
* dvisvgmOptions: Options. (line 174)
* E: Labels. (line 18)
* E <1>: Mathematical functions.
- (line 48)
+ (line 49)
* Editing modes: Editing modes. (line 6)
* Ei: Mathematical functions.
- (line 48)
+ (line 49)
* ellipse: Paths and guides. (line 45)
* elliptic functions: Mathematical functions.
- (line 48)
+ (line 49)
* else: Programming. (line 27)
* emacs: Editing modes. (line 6)
* embed: embed. (line 6)
-* Embedded: three. (line 536)
+* Embedded: three. (line 549)
* emissivepen: three. (line 66)
* empty: Frames and pictures.
(line 7)
* EndArcArrow: draw. (line 30)
-* EndArcArrow3: three. (line 632)
+* EndArcArrow3: three. (line 645)
* EndArrow: draw. (line 26)
-* EndArrow3: three. (line 632)
+* EndArrow3: three. (line 645)
* EndBar: draw. (line 19)
-* EndBar3: three. (line 632)
+* EndBar3: three. (line 645)
* EndDotMargin: draw. (line 89)
-* EndDotMargin3: three. (line 648)
+* EndDotMargin3: three. (line 661)
* endl: Files. (line 65)
* EndMargin: draw. (line 69)
-* EndMargin3: three. (line 648)
+* EndMargin3: three. (line 661)
* EndPenMargin: draw. (line 78)
-* EndPenMargin2: three. (line 648)
-* EndPenMargin3: three. (line 648)
+* EndPenMargin2: three. (line 661)
+* EndPenMargin3: three. (line 661)
* EndPoint: label. (line 62)
* envelope: label. (line 111)
* environment variables: Configuring. (line 90)
@@ -9712,17 +9728,17 @@ Index
* expm1: Mathematical functions.
(line 6)
* exponential integral: Mathematical functions.
- (line 48)
+ (line 49)
* extendcap: Pens. (line 139)
* extension: Paths and guides. (line 246)
* extension <1>: MetaPost. (line 10)
* external: embed. (line 11)
-* extrude: three. (line 560)
+* extrude: three. (line 573)
* F: Mathematical functions.
- (line 48)
+ (line 49)
* fabs: Mathematical functions.
(line 6)
-* face: three. (line 672)
+* face: three. (line 685)
* factorial: Mathematical functions.
(line 39)
* Fedora: UNIX binary distributions.
@@ -9751,7 +9767,7 @@ Index
* find <1>: Arrays. (line 158)
* findall: Arrays. (line 163)
* firstcut: Paths and guides. (line 262)
-* fit3: three. (line 340)
+* fit3: three. (line 353)
* fixedscaling: Frames and pictures.
(line 68)
* floor: Mathematical functions.
@@ -9775,7 +9791,7 @@ Index
(line 7)
* freshnel0: three. (line 66)
* from: Import. (line 16)
-* FrontView: three. (line 452)
+* FrontView: three. (line 465)
* function declarations: Functions. (line 79)
* Function shading: fill. (line 100)
* function shading: fill. (line 100)
@@ -9797,10 +9813,10 @@ Index
* git: Git. (line 6)
* globalwrite: Files. (line 40)
* globalwrite <1>: Files. (line 154)
-* glOptions: three. (line 261)
+* glOptions: three. (line 274)
* glOptions <1>: Options. (line 174)
* GNU Scientific Library: Mathematical functions.
- (line 48)
+ (line 49)
* gouraudshade: fill. (line 63)
* Gradient: palette. (line 25)
* gradient shading: fill. (line 32)
@@ -9820,7 +9836,7 @@ Index
* GSL: Compiling from UNIX source.
(line 62)
* gsl: Mathematical functions.
- (line 48)
+ (line 49)
* gsOptions: Options. (line 174)
* GUI: GUI. (line 6)
* GUI installation: GUI installation. (line 6)
@@ -9839,16 +9855,16 @@ Index
* hex <1>: Pens. (line 64)
* hexadecimal: Data types. (line 306)
* hexadecimal <1>: Pens. (line 62)
-* hidden surface removal: three. (line 672)
+* hidden surface removal: three. (line 685)
* histogram: Mathematical functions.
(line 39)
* history: Files. (line 147)
* history <1>: Interactive mode. (line 54)
* historylines: Interactive mode. (line 58)
* HookHead: draw. (line 50)
-* HookHead3: three. (line 632)
+* HookHead3: three. (line 645)
* Horizontal: flowchart. (line 77)
-* HTML5: three. (line 233)
+* HTML5: three. (line 246)
* htmlviewer: Configuring. (line 15)
* htmlviewer <1>: Configuring. (line 38)
* htmlviewerOptions: Options. (line 174)
@@ -9856,22 +9872,22 @@ Index
* hypot: Mathematical functions.
(line 6)
* I: Mathematical functions.
- (line 48)
+ (line 49)
* i_scaled: Mathematical functions.
- (line 48)
-* ibl: three. (line 104)
-* iconify: three. (line 261)
+ (line 49)
+* ibl: three. (line 117)
+* iconify: three. (line 274)
* identity: Transforms. (line 24)
* identity <1>: Mathematical functions.
(line 6)
* identity <2>: Arrays. (line 321)
-* identity4: three. (line 504)
+* identity4: three. (line 517)
* if: Programming. (line 27)
* IgnoreAspect: Frames and pictures.
(line 50)
* image: palette. (line 33)
* image <1>: palette. (line 61)
-* image-based lighting: three. (line 104)
+* image-based lighting: three. (line 117)
* ImageMagick: Configuring. (line 69)
* ImageMagick <1>: animation. (line 6)
* ImageMagick <2>: Options. (line 188)
@@ -9881,7 +9897,7 @@ Index
* implicit scaling: Implicit scaling. (line 6)
* implicitsurface: smoothcontour3. (line 16)
* import: Import. (line 45)
-* importv3d: three. (line 318)
+* importv3d: three. (line 331)
* inches: Figure size. (line 18)
* incircle: Data types. (line 120)
* include: Import. (line 131)
@@ -9893,7 +9909,7 @@ Index
* initializers: Variable initializers.
(line 6)
* inline: LaTeX usage. (line 47)
-* InOutTicks: graph3. (line 35)
+* InOutTicks: graph3. (line 38)
* input: Files. (line 10)
* input <1>: Files. (line 12)
* input <2>: Interactive mode. (line 45)
@@ -9904,16 +9920,16 @@ Index
* inside: Paths and guides. (line 294)
* inside <1>: Paths and guides. (line 299)
* inside <2>: Paths and guides. (line 305)
-* insphere: three. (line 595)
+* insphere: three. (line 608)
* inst: Debugger. (line 35)
* installation: Installation. (line 6)
* int: Data types. (line 30)
* integer division: Arithmetic & logical.
(line 20)
* integral: Mathematical functions.
- (line 82)
+ (line 83)
* integrate: Mathematical functions.
- (line 82)
+ (line 83)
* interactive mode: Drawing in interactive mode.
(line 6)
* interactive mode <1>: Interactive mode. (line 6)
@@ -9923,34 +9939,34 @@ Index
* interpolate: interpolate. (line 6)
* intersect: Paths and guides. (line 195)
* intersect <1>: math. (line 13)
-* intersect <2>: three. (line 566)
+* intersect <2>: three. (line 579)
* intersectionpoint: Paths and guides. (line 238)
* intersectionpoint <1>: math. (line 17)
-* intersectionpoint <2>: three. (line 566)
+* intersectionpoint <2>: three. (line 579)
* intersectionpoints: Paths and guides. (line 242)
-* intersectionpoints <1>: three. (line 566)
-* intersectionpoints <2>: three. (line 579)
+* intersectionpoints <1>: three. (line 579)
+* intersectionpoints <2>: three. (line 592)
* intersections: Paths and guides. (line 206)
* intersections <1>: Paths and guides. (line 213)
-* intersections <2>: three. (line 566)
-* intersections <3>: three. (line 572)
-* InTicks: graph3. (line 35)
+* intersections <2>: three. (line 579)
+* intersections <3>: three. (line 585)
+* InTicks: graph3. (line 38)
* intMax: Data types. (line 30)
* intMin: Data types. (line 30)
* inverse: Transforms. (line 16)
* inverse <1>: Arrays. (line 327)
-* invert: three. (line 494)
+* invert: three. (line 507)
* invisible: Pens. (line 43)
* isnan: Data types. (line 35)
* J: Mathematical functions.
(line 6)
* J <1>: Mathematical functions.
- (line 48)
+ (line 49)
* Japanese: Pens. (line 297)
* K: Mathematical functions.
- (line 48)
+ (line 49)
* k_scaled: Mathematical functions.
- (line 48)
+ (line 49)
* Kate: Editing modes. (line 48)
* KDE editor: Editing modes. (line 48)
* keepAspect: Frames and pictures.
@@ -9958,7 +9974,7 @@ Index
* keepAspect <1>: Frames and pictures.
(line 50)
* keepAspect <2>: LaTeX usage. (line 47)
-* keyboard bindings:: three. (line 211)
+* keyboard bindings:: three. (line 224)
* keys: Arrays. (line 39)
* keyword: Named arguments. (line 37)
* keyword-only: Named arguments. (line 37)
@@ -9969,7 +9985,7 @@ Index
* label <1>: label. (line 6)
* Label <1>: label. (line 21)
* Label <2>: graph. (line 331)
-* label <2>: three. (line 530)
+* label <2>: three. (line 543)
* labelmargin: label. (line 6)
* labelpath: labelpath. (line 6)
* labelpath3: labelpath3. (line 6)
@@ -9996,19 +10012,19 @@ Index
* LeftSide: label. (line 67)
* LeftTicks: graph. (line 161)
* LeftTicks <1>: graph. (line 234)
-* LeftView: three. (line 452)
+* LeftView: three. (line 465)
* legend: Drawing commands. (line 34)
* legend <1>: draw. (line 99)
* legend <2>: graph. (line 425)
* Legendre: Mathematical functions.
- (line 48)
+ (line 49)
* length: Data types. (line 65)
* length <1>: Data types. (line 144)
* length <2>: Data types. (line 239)
* length <3>: Paths and guides. (line 76)
* length <4>: Paths and guides. (line 374)
* length <5>: Arrays. (line 39)
-* length <6>: three. (line 566)
+* length <6>: three. (line 579)
* letter: Configuring. (line 63)
* lexorder: math. (line 63)
* lexorder <1>: math. (line 66)
@@ -10063,11 +10079,11 @@ Index
* map <1>: Arrays. (line 140)
* map <2>: map. (line 6)
* Margin: draw. (line 69)
-* Margin3: three. (line 648)
-* Margin3 <1>: three. (line 648)
+* Margin3: three. (line 661)
+* Margin3 <1>: three. (line 661)
* Margins: draw. (line 70)
-* margins: three. (line 333)
-* Margins3: three. (line 648)
+* margins: three. (line 346)
+* Margins3: three. (line 661)
* mark: graph. (line 481)
* markangle: markers. (line 35)
* marker: graph. (line 481)
@@ -10084,12 +10100,12 @@ Index
(line 7)
* max <2>: Arrays. (line 230)
* max <3>: Arrays. (line 240)
-* max <4>: three. (line 566)
+* max <4>: three. (line 579)
* maxbound: Data types. (line 134)
* maxbound <1>: Data types. (line 205)
-* maxtile: three. (line 261)
+* maxtile: three. (line 274)
* maxtimes: Paths and guides. (line 233)
-* maxviewport: three. (line 261)
+* maxviewport: three. (line 274)
* metallic: three. (line 66)
* MetaPost: MetaPost. (line 6)
* MetaPost ... : Bezier curves. (line 70)
@@ -10099,9 +10115,9 @@ Index
* MetaPost whatever: MetaPost. (line 10)
* Microsoft Windows: Microsoft Windows. (line 6)
* MidArcArrow: draw. (line 30)
-* MidArcArrow3: three. (line 632)
+* MidArcArrow3: three. (line 645)
* MidArrow: draw. (line 26)
-* MidArrow3: three. (line 632)
+* MidArrow3: three. (line 645)
* MidPoint: label. (line 62)
* midpoint: Paths and guides. (line 180)
* min: Paths and guides. (line 275)
@@ -10109,7 +10125,7 @@ Index
(line 7)
* min <2>: Arrays. (line 225)
* min <3>: Arrays. (line 235)
-* min <4>: three. (line 566)
+* min <4>: three. (line 579)
* minbound: Data types. (line 131)
* minbound <1>: Data types. (line 202)
* minipage: label. (line 125)
@@ -10118,16 +10134,16 @@ Index
* miterlimit: Pens. (line 159)
* mktemp: Files. (line 48)
* mm: Figure size. (line 18)
-* mobile browser: three. (line 233)
+* mobile browser: three. (line 246)
* mode: Files. (line 80)
* mode <1>: Files. (line 93)
* monotonic: graph. (line 36)
* mouse: GUI. (line 6)
-* mouse bindings: three. (line 192)
+* mouse bindings: three. (line 205)
* mouse wheel: GUI usage. (line 6)
* Move: Pens. (line 428)
* MoveQuiet: Pens. (line 434)
-* multisample: three. (line 184)
+* multisample: three. (line 197)
* N: Labels. (line 18)
* name: Files. (line 93)
* named arguments: Named arguments. (line 6)
@@ -10141,9 +10157,9 @@ Index
* newl: Files. (line 65)
* newpage: Drawing commands. (line 27)
* newton: Mathematical functions.
- (line 66)
+ (line 67)
* newton <1>: Mathematical functions.
- (line 73)
+ (line 74)
* next: Debugger. (line 41)
* nobasealign: Pens. (line 181)
* NoFill: Frames and pictures.
@@ -10152,31 +10168,30 @@ Index
* noglobalread <1>: Files. (line 40)
* nolight: three. (line 76)
* NoMargin: draw. (line 67)
-* NoMargin3: three. (line 648)
+* NoMargin3: three. (line 661)
* None: draw. (line 19)
* None <1>: draw. (line 26)
* none: Files. (line 65)
-* normal: three. (line 552)
+* normal: three. (line 565)
* nosafe: Options. (line 209)
* NOT: Arithmetic & logical.
(line 68)
* notaknot: graph. (line 36)
* NoTicks: graph. (line 161)
-* NoTicks3: graph3. (line 35)
+* NoTicks3: graph3. (line 38)
* null: Structures. (line 6)
* nullpen: label. (line 21)
* nullpen <1>: Frames and pictures.
(line 127)
* nullpen <2>: Frames and pictures.
(line 136)
-* NURBS: three. (line 432)
-* O: three. (line 345)
+* O: three. (line 358)
* obj: obj. (line 6)
* object: label. (line 111)
-* oblique: three. (line 388)
-* obliqueX: three. (line 395)
-* obliqueY: three. (line 401)
-* obliqueZ: three. (line 388)
+* oblique: three. (line 401)
+* obliqueX: three. (line 408)
+* obliqueY: three. (line 414)
+* obliqueZ: three. (line 401)
* ode: ode. (line 6)
* offset: Pens. (line 123)
* offset <1>: Options. (line 214)
@@ -10186,7 +10201,7 @@ Index
* opacity: Pens. (line 307)
* opacity <1>: three. (line 66)
* open: Files. (line 12)
-* OpenGL: three. (line 184)
+* OpenGL: three. (line 197)
* operator: User-defined operators.
(line 6)
* operator --: graph. (line 30)
@@ -10203,20 +10218,20 @@ Index
* OR: Arithmetic & logical.
(line 68)
* orient: Data types. (line 108)
-* orient <1>: three. (line 583)
+* orient <1>: three. (line 596)
* orientation: Frames and pictures.
(line 90)
-* orthographic: three. (line 405)
-* outformat: three. (line 184)
+* orthographic: three. (line 418)
+* outformat: three. (line 197)
* outprefix: Frames and pictures.
(line 78)
* output: Files. (line 38)
* output <1>: Options. (line 188)
-* OutTicks: graph3. (line 35)
+* OutTicks: graph3. (line 38)
* overloading functions: Functions. (line 55)
* overwrite: Pens. (line 413)
* P: Mathematical functions.
- (line 48)
+ (line 49)
* pack: label. (line 109)
* packing: Rest arguments. (line 30)
* pad: Frames and pictures.
@@ -10228,11 +10243,11 @@ Index
* papertype: Configuring. (line 63)
* paperwidth: Configuring. (line 63)
* parallelogram: flowchart. (line 47)
-* parametric surface: graph3. (line 99)
+* parametric surface: graph3. (line 102)
* parametrized curve: graph. (line 640)
* partialsum: math. (line 49)
* partialsum <1>: math. (line 52)
-* patch-dependent colors: three. (line 119)
+* patch-dependent colors: three. (line 132)
* path: Paths. (line 6)
* path <1>: Paths and guides. (line 7)
* path <2>: three. (line 42)
@@ -10251,15 +10266,15 @@ Index
* pdfviewerOptions: Options. (line 174)
* pen: Pens. (line 6)
* PenMargin: draw. (line 78)
-* PenMargin2: three. (line 648)
-* PenMargin3: three. (line 648)
+* PenMargin2: three. (line 661)
+* PenMargin3: three. (line 661)
* PenMargins: draw. (line 79)
-* PenMargins2: three. (line 648)
-* PenMargins3: three. (line 648)
+* PenMargins2: three. (line 661)
+* PenMargins3: three. (line 661)
* periodic: graph. (line 36)
* perl: LaTeX usage. (line 30)
* perpendicular: geometry. (line 6)
-* perspective: three. (line 432)
+* perspective: three. (line 445)
* physically based rendering: three. (line 74)
* picture: Frames and pictures.
(line 26)
@@ -10274,16 +10289,16 @@ Index
* picture.scale: Frames and pictures.
(line 110)
* piecewisestraight: Paths and guides. (line 92)
-* pixel: three. (line 655)
+* pixel: three. (line 668)
* Pl: Mathematical functions.
- (line 48)
+ (line 49)
* plain: plain. (line 6)
-* planar: three. (line 128)
-* plane: three. (line 371)
-* planeproject: three. (line 549)
+* planar: three. (line 141)
+* plane: three. (line 384)
+* planeproject: three. (line 562)
* point: Paths and guides. (line 95)
* point <1>: Paths and guides. (line 380)
-* point <2>: three. (line 566)
+* point <2>: three. (line 579)
* polar: Data types. (line 149)
* polargraph: graph. (line 89)
* polygon: graph. (line 481)
@@ -10291,9 +10306,9 @@ Index
* Portrait: Frames and pictures.
(line 90)
* position: three. (line 76)
-* position <1>: three. (line 184)
+* position <1>: three. (line 197)
* postcontrol: Paths and guides. (line 146)
-* postcontrol <1>: three. (line 566)
+* postcontrol <1>: three. (line 579)
* postfix operators: Self & prefix operators.
(line 19)
* postscript: Frames and pictures.
@@ -10302,10 +10317,10 @@ Index
* PostScript subpath: Paths. (line 23)
* pow10: Mathematical functions.
(line 6)
-* prc: three. (line 279)
+* prc: three. (line 292)
* precision: Files. (line 97)
* precontrol: Paths and guides. (line 139)
-* precontrol <1>: three. (line 566)
+* precontrol <1>: three. (line 579)
* prefix operators: Self & prefix operators.
(line 6)
* private: Structures. (line 6)
@@ -10337,7 +10352,7 @@ Index
* radians: Mathematical functions.
(line 17)
* radius: Paths and guides. (line 135)
-* radius <1>: three. (line 566)
+* radius <1>: three. (line 579)
* Rainbow: palette. (line 12)
* rand: Mathematical functions.
(line 39)
@@ -10366,7 +10381,7 @@ Index
(line 6)
* rename: Files. (line 156)
* render: three. (line 46)
-* render <1>: three. (line 184)
+* render <1>: three. (line 197)
* render <2>: Options. (line 188)
* replace: Data types. (line 270)
* resetdefaultpen: Pens. (line 440)
@@ -10379,21 +10394,21 @@ Index
* reverse <1>: Paths and guides. (line 183)
* reverse <2>: Paths and guides. (line 383)
* reverse <3>: Arrays. (line 145)
-* reverse <4>: three. (line 566)
+* reverse <4>: three. (line 579)
* rewind: Files. (line 97)
* rfind: Data types. (line 247)
* rgb: Pens. (line 30)
* rgb <1>: Pens. (line 34)
* rgb <2>: Pens. (line 62)
* Riemann zeta function: Mathematical functions.
- (line 48)
+ (line 49)
* Right: graph. (line 273)
* RightSide: label. (line 67)
* RightTicks: graph. (line 161)
* RightTicks <1>: graph. (line 234)
-* RightView: three. (line 452)
+* RightView: three. (line 465)
* Rotate: label. (line 43)
-* rotate: three. (line 520)
+* rotate: three. (line 533)
* Rotate(pair z): label. (line 46)
* round: Mathematical functions.
(line 26)
@@ -10416,8 +10431,8 @@ Index
* scale <2>: Transforms. (line 36)
* scale <3>: graph. (line 711)
* Scale <1>: graph. (line 728)
-* scale <4>: three. (line 519)
-* scale3: three. (line 517)
+* scale <4>: three. (line 532)
+* scale3: three. (line 530)
* scaled graph: graph. (line 691)
* schur: Arrays. (line 271)
* schur <1>: Arrays. (line 275)
@@ -10448,21 +10463,21 @@ Index
* shift: Transforms. (line 26)
* shift <1>: Transforms. (line 28)
* shift <2>: Transforms. (line 46)
-* shift <3>: three. (line 509)
+* shift <3>: three. (line 522)
* shiftless: Transforms. (line 46)
* shininess: three. (line 66)
* shipout: Frames and pictures.
(line 78)
-* showtarget: three. (line 405)
+* showtarget: three. (line 418)
* Si: Mathematical functions.
- (line 48)
+ (line 49)
* signedint: Files. (line 80)
* signedint <1>: Files. (line 93)
* SimpleHead: draw. (line 50)
* simplex: simplex. (line 6)
* simplex2: simplex2. (line 6)
* simpson: Mathematical functions.
- (line 82)
+ (line 83)
* sin: Mathematical functions.
(line 6)
* Sin: Mathematical functions.
@@ -10474,9 +10489,9 @@ Index
* singlereal <1>: Files. (line 93)
* sinh: Mathematical functions.
(line 6)
-* SixViews: three. (line 467)
-* SixViewsFR: three. (line 467)
-* SixViewsUS: three. (line 467)
+* SixViews: three. (line 480)
+* SixViewsFR: three. (line 480)
+* SixViewsUS: three. (line 480)
* size: Figure size. (line 6)
* size <1>: Paths and guides. (line 81)
* size <2>: Paths and guides. (line 371)
@@ -10484,9 +10499,9 @@ Index
(line 35)
* size <4>: Frames and pictures.
(line 61)
-* size <5>: three. (line 566)
+* size <5>: three. (line 579)
* size <6>: Options. (line 188)
-* size3: three. (line 330)
+* size3: three. (line 343)
* Slant: label. (line 49)
* slant: Transforms. (line 38)
* sleep: Data types. (line 376)
@@ -10499,7 +10514,7 @@ Index
* slopefield: slopefield. (line 6)
* smoothcontour3: smoothcontour3. (line 6)
* sncndn: Mathematical functions.
- (line 48)
+ (line 49)
* solid: Pens. (line 102)
* solids: solids. (line 6)
* solve: Arrays. (line 299)
@@ -10511,7 +10526,7 @@ Index
* specularfactor: three. (line 76)
* specularpen: three. (line 66)
* Spline: graph. (line 33)
-* Spline <1>: graph3. (line 99)
+* Spline <1>: graph3. (line 102)
* split: Data types. (line 279)
* sqrt: Mathematical functions.
(line 6)
@@ -10530,7 +10545,7 @@ Index
* stop: Debugger. (line 10)
* straight: Paths and guides. (line 88)
* Straight: graph. (line 30)
-* straight <1>: three. (line 566)
+* straight <1>: three. (line 579)
* strftime: Data types. (line 321)
* strftime <1>: Data types. (line 346)
* string: Data types. (line 208)
@@ -10542,7 +10557,7 @@ Index
* struct: Structures. (line 6)
* structures: Structures. (line 6)
* subpath: Paths and guides. (line 186)
-* subpath <1>: three. (line 566)
+* subpath <1>: three. (line 579)
* subpictures: Frames and pictures.
(line 100)
* substr: Data types. (line 262)
@@ -10551,11 +10566,11 @@ Index
* Suppress: Pens. (line 420)
* SuppressQuiet: Pens. (line 424)
* surface: three. (line 46)
-* surface <1>: three. (line 104)
-* surface <2>: three. (line 128)
-* surface <3>: three. (line 142)
-* surface <4>: graph3. (line 99)
-* surface <5>: graph3. (line 128)
+* surface <1>: three. (line 117)
+* surface <2>: three. (line 141)
+* surface <3>: three. (line 155)
+* surface <4>: graph3. (line 102)
+* surface <5>: graph3. (line 131)
* SVG: Options. (line 193)
* system: Data types. (line 354)
* system <1>: Options. (line 209)
@@ -10569,7 +10584,7 @@ Index
(line 20)
* tanh: Mathematical functions.
(line 6)
-* target: three. (line 405)
+* target: three. (line 418)
* tell: Files. (line 97)
* template: Templated imports. (line 6)
* tension: Bezier curves. (line 56)
@@ -10577,7 +10592,7 @@ Index
* tensionSpecifier: Paths and guides. (line 403)
* tensor product shading: fill. (line 78)
* tensorshade: fill. (line 78)
-* tessellation: three. (line 154)
+* tessellation: three. (line 167)
* tex: Frames and pictures.
(line 292)
* tex <1>: Options. (line 188)
@@ -10585,7 +10600,7 @@ Index
* TeX string: Data types. (line 208)
* texcommand: Configuring. (line 69)
* TeXHead: draw. (line 50)
-* TeXHead3: three. (line 632)
+* TeXHead3: three. (line 645)
* texpath: Configuring. (line 69)
* texpath <1>: label. (line 122)
* texpreamble: Frames and pictures.
@@ -10595,13 +10610,13 @@ Index
* textbook graph: graph. (line 361)
* tgz: UNIX binary distributions.
(line 6)
-* thick: three. (line 166)
-* thin: three. (line 166)
+* thick: three. (line 179)
+* thin: three. (line 179)
* this: Structures. (line 6)
* three: three. (line 6)
-* ThreeViews: three. (line 467)
-* ThreeViewsFR: three. (line 467)
-* ThreeViewsUS: three. (line 467)
+* ThreeViews: three. (line 480)
+* ThreeViewsFR: three. (line 480)
+* ThreeViewsUS: three. (line 480)
* tick: graph. (line 331)
* ticks: graph. (line 161)
* Ticks: graph. (line 161)
@@ -10616,12 +10631,12 @@ Index
* times: Paths and guides. (line 220)
* times <1>: Paths and guides. (line 224)
* Top: graph. (line 136)
-* TopView: three. (line 452)
+* TopView: three. (line 465)
* trace: Debugger. (line 50)
* trailingzero: graph. (line 176)
* transform: Transforms. (line 6)
-* transform <1>: three. (line 541)
-* transform3: three. (line 504)
+* transform <1>: three. (line 554)
+* transform3: three. (line 517)
* transparency: Pens. (line 307)
* transparent: three. (line 97)
* transpose: Arrays. (line 212)
@@ -10629,15 +10644,15 @@ Index
* tree: tree. (line 6)
* trembling: trembling. (line 6)
* triangle: geometry. (line 6)
-* triangles: three. (line 154)
+* triangles: three. (line 167)
* triangulate: contour. (line 192)
* tridiagonal: Arrays. (line 286)
* trigonometric integrals: Mathematical functions.
- (line 48)
+ (line 49)
* triple: Data types. (line 137)
* TrueMargin: draw. (line 90)
-* TrueMargin3: three. (line 648)
-* tube: three. (line 166)
+* TrueMargin3: three. (line 661)
+* tube: three. (line 179)
* tube <1>: tube. (line 6)
* tutorial: Tutorial. (line 6)
* type1cm: Pens. (line 245)
@@ -10656,10 +10671,10 @@ Index
* unit: Data types. (line 83)
* unit <1>: Data types. (line 174)
* unitbox: Paths. (line 44)
-* unitbox <1>: three. (line 377)
+* unitbox <1>: three. (line 390)
* unitcircle: Paths. (line 17)
* unitcircle <1>: Paths. (line 17)
-* unitcircle <2>: three. (line 345)
+* unitcircle <2>: three. (line 358)
* unitrand: Mathematical functions.
(line 39)
* unitsize: Figure size. (line 39)
@@ -10669,7 +10684,7 @@ Index
(line 6)
* unpacking: Rest arguments. (line 39)
* unravel: Import. (line 29)
-* up: three. (line 405)
+* up: three. (line 418)
* update: Files. (line 38)
* UpsideDown: Frames and pictures.
(line 90)
@@ -10682,7 +10697,7 @@ Index
* user-defined operators: User-defined operators.
(line 6)
* usleep: Data types. (line 379)
-* v3d: three. (line 300)
+* v3d: three. (line 313)
* value: math. (line 34)
* value <1>: math. (line 37)
* var: Variable initializers.
@@ -10691,24 +10706,24 @@ Index
(line 6)
* vectorfield: graph. (line 1023)
* vectorfield <1>: graph. (line 1062)
-* vectorfield3: graph3. (line 167)
+* vectorfield3: graph3. (line 170)
* vectorization: Arrays. (line 343)
* verbatim: Frames and pictures.
(line 284)
-* vertex-dependent colors: three. (line 119)
+* vertex-dependent colors: three. (line 132)
* Vertical: flowchart. (line 77)
* Viewport: three. (line 76)
* viewportheight: LaTeX usage. (line 47)
-* viewportmargin: three. (line 333)
-* viewportsize: three. (line 333)
+* viewportmargin: three. (line 346)
+* viewportsize: three. (line 346)
* viewportwidth: LaTeX usage. (line 47)
-* views: three. (line 279)
+* views: three. (line 292)
* vim: Editing modes. (line 32)
* virtual functions: Structures. (line 124)
* void: Data types. (line 10)
* W: Labels. (line 18)
* warn: Configuring. (line 79)
-* WebGL: three. (line 233)
+* WebGL: three. (line 246)
* whatever: Paths and guides. (line 246)
* Wheel: palette. (line 22)
* wheel mouse: GUI. (line 6)
@@ -10720,7 +10735,7 @@ Index
* word: Arrays. (line 374)
* write: Files. (line 57)
* write <1>: Arrays. (line 413)
-* X: three. (line 345)
+* X: three. (line 358)
* xasy: GUI. (line 6)
* xaxis3: graph3. (line 7)
* xdr: Files. (line 80)
@@ -10733,20 +10748,20 @@ Index
* xpart: Data types. (line 94)
* xpart <1>: Data types. (line 185)
* xscale: Transforms. (line 30)
-* xscale3: three. (line 511)
+* xscale3: three. (line 524)
* xtick: graph. (line 331)
-* XY: three. (line 526)
-* XY <1>: three. (line 541)
-* XYEquals: graph3. (line 21)
-* XYZero: graph3. (line 21)
-* XZEquals: graph3. (line 21)
+* XY: three. (line 539)
+* XY <1>: three. (line 554)
+* XYEquals: graph3. (line 24)
+* XYZero: graph3. (line 24)
+* XZEquals: graph3. (line 24)
* XZero: graph. (line 261)
-* XZZero: graph3. (line 21)
+* XZZero: graph3. (line 24)
* Y: Mathematical functions.
(line 6)
* Y <1>: Mathematical functions.
- (line 48)
-* Y <2>: three. (line 345)
+ (line 49)
+* Y <2>: three. (line 358)
* yaxis3: graph3. (line 7)
* YEquals: graph. (line 129)
* yequals: graph. (line 279)
@@ -10754,190 +10769,191 @@ Index
* ypart: Data types. (line 97)
* ypart <1>: Data types. (line 188)
* yscale: Transforms. (line 32)
-* yscale3: three. (line 513)
+* yscale3: three. (line 526)
* ytick: graph. (line 331)
-* YX: three. (line 541)
-* YZ: three. (line 541)
-* YZEquals: graph3. (line 21)
+* YX: three. (line 554)
+* YZ: three. (line 554)
+* YZEquals: graph3. (line 24)
* YZero: graph. (line 124)
-* YZZero: graph3. (line 21)
-* Z: three. (line 345)
+* YZZero: graph3. (line 24)
+* Z: three. (line 358)
* zaxis3: graph3. (line 7)
* zero_Ai: Mathematical functions.
- (line 48)
+ (line 49)
* zero_Ai_deriv: Mathematical functions.
- (line 48)
+ (line 49)
* zero_Bi: Mathematical functions.
- (line 48)
+ (line 49)
* zero_Bi_deriv: Mathematical functions.
- (line 48)
+ (line 49)
* zero_J: Mathematical functions.
- (line 48)
+ (line 49)
* zeroTransform: Transforms. (line 44)
* zerowinding: Pens. (line 164)
* zeta: Mathematical functions.
- (line 48)
+ (line 49)
* zpart: Data types. (line 191)
-* zscale3: three. (line 515)
-* ZX: three. (line 541)
-* ZX <1>: three. (line 541)
-* ZY: three. (line 541)
+* zscale3: three. (line 528)
+* ZX: three. (line 554)
+* ZX <1>: three. (line 554)
+* ZY: three. (line 554)

Tag Table:
Node: Top573
Node: Description7668
-Node: Installation12075
-Node: UNIX binary distributions13220
-Node: MacOS X binary distributions14395
-Node: Microsoft Windows15007
-Node: Configuring16247
-Node: Search paths20762
-Node: Compiling from UNIX source21854
-Node: Editing modes25157
-Node: Git27735
-Node: Building the documentation28258
-Node: Uninstall28824
-Node: Tutorial29180
-Node: Drawing in batch mode30051
-Node: Drawing in interactive mode30975
-Node: Figure size32046
-Node: Labels33733
-Node: Paths34625
-Ref: unitcircle35265
-Node: Drawing commands37258
-Node: draw39126
-Ref: arrows40402
-Node: fill46708
-Ref: gradient shading47790
-Node: clip52636
-Node: label53413
-Ref: Label54327
-Ref: baseline58241
-Ref: envelope58977
-Node: Bezier curves60529
-Node: Programming64497
-Ref: array iteration66357
-Node: Data types66524
-Ref: format78182
-Node: Paths and guides82850
-Ref: circle83112
-Ref: extension93464
-Node: Pens100657
-Ref: fillrule108796
-Ref: basealign109754
-Ref: transparency115119
-Ref: makepen118840
-Ref: overwrite119746
-Node: Transforms121005
-Node: Frames and pictures123100
-Ref: size124772
-Ref: unitsize125839
-Ref: shipout126968
-Ref: filltype129354
-Ref: add132983
-Ref: add about133956
-Ref: tex137074
-Node: Deferred drawing137985
-Node: Files141276
-Ref: cd142366
-Ref: scroll147512
-Node: Variable initializers150621
-Node: Structures153502
-Node: Operators158816
-Node: Arithmetic & logical159132
-Node: Self & prefix operators161688
-Node: User-defined operators162548
-Node: Implicit scaling163487
-Node: Functions164050
-Ref: stack overflow167195
-Node: Default arguments167481
-Node: Named arguments168253
-Node: Rest arguments170903
-Node: Mathematical functions174060
-Node: Arrays180924
-Ref: sort189022
-Ref: tridiagonal192580
-Ref: solve193895
-Node: Slices198215
-Node: Casts202235
-Node: Import204649
-Node: Templated imports210291
-Node: Static212185
-Node: LaTeX usage215143
-Node: Base modules221744
-Node: plain224309
-Node: simplex225015
-Node: simplex2225219
-Node: math225488
-Node: interpolate228419
-Node: geometry228710
-Node: trembling229406
-Node: stats229683
-Node: patterns229954
-Node: markers230197
-Node: map232097
-Node: tree232533
-Node: binarytree232717
-Node: drawtree233392
-Node: syzygy233601
-Node: feynman233883
-Node: roundedpath234169
-Node: animation234459
-Ref: animate234907
-Node: embed236083
-Node: slide237093
-Node: MetaPost237436
-Node: babel238212
-Node: labelpath238460
-Node: labelpath3239324
-Node: annotate239651
-Node: CAD240141
-Node: graph240459
-Ref: ticks248075
-Ref: pathmarkers262263
-Ref: marker262737
-Ref: markuniform263103
-Ref: errorbars265010
-Ref: automatic scaling270187
-Node: palette282007
-Ref: images282129
-Ref: image286593
-Ref: logimage287114
-Ref: penimage288224
-Ref: penfunctionimage288487
-Node: three289263
-Ref: PostScript3D321652
-Node: obj323446
-Node: graph3323707
-Ref: GaussianSurface329578
-Node: grid3330756
-Node: solids331592
-Node: tube332616
-Node: flowchart334999
-Node: contour339718
-Node: contour3346318
-Node: smoothcontour3346642
-Node: slopefield348409
-Node: ode349954
-Node: Options350223
-Ref: configuration file358661
-Ref: settings358661
-Ref: texengines360009
-Ref: magick360009
-Node: Interactive mode363404
-Ref: history365633
-Node: GUI367004
-Node: GUI installation367574
-Node: GUI usage368570
-Node: Command-Line Interface369637
-Node: Language server protocol371125
-Node: PostScript to Asymptote372606
-Node: Help373433
-Node: Debugger375163
-Node: Credits377011
-Node: Index378268
+Node: Installation12082
+Node: UNIX binary distributions13227
+Node: MacOS X binary distributions14402
+Node: Microsoft Windows15014
+Node: Configuring16254
+Node: Search paths20769
+Node: Compiling from UNIX source21861
+Node: Editing modes25164
+Node: Git27742
+Node: Building the documentation28265
+Node: Uninstall28831
+Node: Tutorial29187
+Node: Drawing in batch mode30058
+Node: Drawing in interactive mode30982
+Node: Figure size32053
+Node: Labels33740
+Node: Paths34632
+Ref: unitcircle35272
+Node: Drawing commands37265
+Node: draw39133
+Ref: arrows40409
+Node: fill46715
+Ref: gradient shading47797
+Node: clip52672
+Node: label53449
+Ref: Label54363
+Ref: baseline58277
+Ref: envelope59013
+Node: Bezier curves60565
+Node: Programming64532
+Ref: array iteration66392
+Node: Data types66559
+Ref: format78217
+Node: Paths and guides82885
+Ref: circle83147
+Ref: extension93499
+Node: Pens100692
+Ref: fillrule108831
+Ref: basealign109789
+Ref: transparency115154
+Ref: makepen118875
+Ref: overwrite119781
+Node: Transforms121040
+Node: Frames and pictures123135
+Ref: size124807
+Ref: unitsize125874
+Ref: shipout127003
+Ref: filltype129389
+Ref: add133018
+Ref: add about133991
+Ref: tex137109
+Ref: deferred drawing138020
+Node: Deferred drawing138020
+Node: Files141311
+Ref: cd142401
+Ref: scroll147547
+Node: Variable initializers150656
+Node: Structures153537
+Node: Operators158851
+Node: Arithmetic & logical159167
+Node: Self & prefix operators161723
+Node: User-defined operators162583
+Node: Implicit scaling163522
+Node: Functions164085
+Ref: stack overflow167230
+Node: Default arguments167516
+Node: Named arguments168288
+Node: Rest arguments170938
+Node: Mathematical functions174095
+Node: Arrays181030
+Ref: sort189128
+Ref: tridiagonal192686
+Ref: solve194001
+Node: Slices198321
+Node: Casts202341
+Node: Import204755
+Node: Templated imports210397
+Node: Static212291
+Node: LaTeX usage215249
+Node: Base modules221850
+Node: plain224415
+Node: simplex225121
+Node: simplex2225325
+Node: math225621
+Node: interpolate228552
+Node: geometry228843
+Node: trembling229539
+Node: stats229816
+Node: patterns230087
+Node: markers230330
+Node: map232230
+Node: tree232650
+Node: binarytree232834
+Node: drawtree233509
+Node: syzygy233718
+Node: feynman234000
+Node: roundedpath234286
+Node: animation234576
+Ref: animate235024
+Node: embed236200
+Node: slide237210
+Node: MetaPost237553
+Node: babel238329
+Node: labelpath238577
+Node: labelpath3239441
+Node: annotate239768
+Node: CAD240258
+Node: graph240576
+Ref: ticks248192
+Ref: pathmarkers262380
+Ref: marker262854
+Ref: markuniform263220
+Ref: errorbars265127
+Ref: automatic scaling270304
+Node: palette282124
+Ref: images282246
+Ref: image286710
+Ref: logimage287231
+Ref: penimage288341
+Ref: penfunctionimage288604
+Node: three289380
+Ref: PostScript3D322409
+Node: obj324203
+Node: graph3324464
+Ref: GaussianSurface330491
+Node: grid3331669
+Node: solids332505
+Node: tube333529
+Node: flowchart335912
+Node: contour340631
+Node: contour3347231
+Node: smoothcontour3347555
+Node: slopefield349322
+Node: ode350867
+Node: Options351136
+Ref: configuration file359588
+Ref: settings359588
+Ref: texengines360936
+Ref: magick360936
+Node: Interactive mode364331
+Ref: history366560
+Node: GUI367931
+Node: GUI installation368501
+Node: GUI usage369497
+Node: Command-Line Interface370564
+Node: Language server protocol372052
+Node: PostScript to Asymptote373533
+Node: Help374360
+Node: Debugger376090
+Node: Credits377938
+Node: Index379195

End Tag Table
diff --git a/graphics/asymptote/drawsurface.cc b/graphics/asymptote/drawsurface.cc
index 104b545668..ef330a07b7 100644
--- a/graphics/asymptote/drawsurface.cc
+++ b/graphics/asymptote/drawsurface.cc
@@ -497,9 +497,9 @@ bool drawBezierTriangle::write(abs3Doutfile *out)
} else {
double prerender=renderResolution();
if(prerender) {
- GLfloat c[16];
+ GLfloat c[12];
if(colors)
- for(size_t i=0; i < 4; ++i)
+ for(size_t i=0; i < 3; ++i)
storecolor(c,4*i,colors[i]);
S.init(prerender,colors ? c : NULL);
S.render(controls,straight,c);
diff --git a/graphics/asymptote/drawsurface.h b/graphics/asymptote/drawsurface.h
index d68f179759..80d9d9415f 100644
--- a/graphics/asymptote/drawsurface.h
+++ b/graphics/asymptote/drawsurface.h
@@ -642,9 +642,9 @@ public:
for(size_t i=0; i < nN; i++)
N[i]=s->N[i];
} else {
- double T[]={t[0],t[1],t[2],
- t[4],t[5],t[6],
- t[8],t[9],t[10]};
+ double T[]={t[0],t[4],t[8],
+ t[1],t[5],t[9],
+ t[2],t[6],t[10]};
run::inverse(T,3);
for(size_t i=0; i < nN; i++)
N[i]=unit(Transform3(s->N[i],T));
diff --git a/graphics/asymptote/errormsg.cc b/graphics/asymptote/errormsg.cc
index c9248a6299..e55a2c4d6b 100644
--- a/graphics/asymptote/errormsg.cc
+++ b/graphics/asymptote/errormsg.cc
@@ -20,6 +20,8 @@ static nullPosInitializer nullPosInit;
bool errorstream::interrupt=false;
+using camp::newl;
+
ostream& operator<< (ostream& out, const position& pos)
{
if (!pos)
@@ -34,7 +36,7 @@ ostream& operator<< (ostream& out, const position& pos)
while(count > 0 && getline(fin,s)) {
count--;
}
- s=std::regex_replace(s,std::regex("\t")," ");
+ s=std::regex_replace(s,std::regex("\t")," ");
out << s << endl;
for(size_t i=1; i < pos.column; ++i)
out << " ";
@@ -42,7 +44,7 @@ ostream& operator<< (ostream& out, const position& pos)
}
out << filename << ": ";
- out << pos.line << "." << pos.column << ": ";
+ out << pos.line << "." << pos.column;
if(settings::getSetting<bool>("xasy")) {
camp::openpipeout();
@@ -62,7 +64,7 @@ void errorstream::clear()
void errorstream::message(position pos, const string& s)
{
if (floating) out << endl;
- out << pos << s;
+ out << pos << ": " << s;
floating = true;
}
@@ -122,9 +124,24 @@ void errorstream::cont()
floating = false;
}
-void errorstream::sync()
+void errorstream::sync(bool reportTraceback)
{
if (floating) out << endl;
+
+ if(reportTraceback && traceback.size()) {
+ bool first=true;
+ for(auto p=this->traceback.rbegin(); p != this->traceback.rend(); ++p) {
+ if(p->filename() != "-") {
+ if(first) {
+ out << newl << "TRACEBACK:";
+ first=false;
+ }
+ cout << newl << (*p) << endl;
+ }
+ }
+ traceback.clear();
+ }
+
floating = false;
}
diff --git a/graphics/asymptote/errormsg.h b/graphics/asymptote/errormsg.h
index eb03faa5cb..95edbeedaf 100644
--- a/graphics/asymptote/errormsg.h
+++ b/graphics/asymptote/errormsg.h
@@ -174,6 +174,9 @@ class errorstream {
public:
static bool interrupt; // Is there a pending interrupt?
+ using traceback_t = mem::list<position> ;
+ traceback_t traceback;
+
errorstream(ostream& out = cerr)
: out(out), anyErrors(false), anyWarnings(false), floating(false),
anyStatusErrors(false) {}
@@ -222,7 +225,7 @@ public:
// Reporting errors to the stream may be incomplete. This draws the
// appropriate newlines or file excerpts that may be needed at the end.
- void sync();
+ void sync(bool reportTraceback=false);
void cont();
diff --git a/graphics/asymptote/examples/AiryDisk.asy b/graphics/asymptote/examples/AiryDisk.asy
index 855abfaa95..03c50ecd55 100644
--- a/graphics/asymptote/examples/AiryDisk.asy
+++ b/graphics/asymptote/examples/AiryDisk.asy
@@ -2,7 +2,7 @@ import graph3;
import gsl;
size(10cm,15cm,IgnoreAspect);
-currentprojection=orthographic(150,50,1);
+currentprojection=orthographic(dir(70,60));
real f(pair z) {real r=abs(z); return r == 0 ? 1 : (2.0*J(1,r)/r)^2;}
diff --git a/graphics/asymptote/examples/RiemannSphere.asy b/graphics/asymptote/examples/RiemannSphere.asy
index 40f9d065a3..3fd08cded9 100644
--- a/graphics/asymptote/examples/RiemannSphere.asy
+++ b/graphics/asymptote/examples/RiemannSphere.asy
@@ -2,7 +2,6 @@ import graph3;
import solids;
currentlight=White;
-defaultrender.merge=true;
size(10cm,0);
diff --git a/graphics/asymptote/examples/RiemannSurface.asy b/graphics/asymptote/examples/RiemannSurface.asy
index 92f94bdc72..2a4ba5e4db 100644
--- a/graphics/asymptote/examples/RiemannSurface.asy
+++ b/graphics/asymptote/examples/RiemannSurface.asy
@@ -4,7 +4,7 @@ import palette;
size(200,300,keepAspect=false);
//settings.nothin=true;
-currentprojection=orthographic(10,10,30);
+currentprojection=orthographic(dir(70,60));
currentlight=(10,10,5);
triple f(pair t) {return (exp(t.x)*cos(t.y),exp(t.x)*sin(t.y),t.y);}
diff --git a/graphics/asymptote/examples/RiemannSurfaceRoot.asy b/graphics/asymptote/examples/RiemannSurfaceRoot.asy
index 65098ac935..a824629e05 100644
--- a/graphics/asymptote/examples/RiemannSurfaceRoot.asy
+++ b/graphics/asymptote/examples/RiemannSurfaceRoot.asy
@@ -6,7 +6,7 @@ int n=3;
size(200,300,keepAspect=false);
-currentprojection=orthographic(10,10,30);
+currentprojection=orthographic(dir(60,60));
currentlight=(10,10,5);
triple f(pair t) {return (t.x*cos(t.y),t.x*sin(t.y),t.x^(1/n)*sin(t.y/n));}
diff --git a/graphics/asymptote/examples/arrows3.asy b/graphics/asymptote/examples/arrows3.asy
index b71c08406a..b3b72166cd 100644
--- a/graphics/asymptote/examples/arrows3.asy
+++ b/graphics/asymptote/examples/arrows3.asy
@@ -2,8 +2,6 @@ import three;
size(15cm);
-defaultrender.merge=true;
-
currentprojection=perspective(24,14,13);
currentlight=light(gray(0.5),specularfactor=3,
(0.5,-0.5,-0.25),(0.5,0.5,0.25),(0.5,0.5,1),(-0.5,-0.5,-1));
diff --git a/graphics/asymptote/examples/clockarray.asy b/graphics/asymptote/examples/clockarray.asy
index be7fd899a0..3e4387d388 100644
--- a/graphics/asymptote/examples/clockarray.asy
+++ b/graphics/asymptote/examples/clockarray.asy
@@ -3,8 +3,6 @@ int ny=4;
real xmargin=1cm;
real ymargin=xmargin;
-size(settings.paperwidth,settings.paperheight);
-
picture pic;
real width=settings.paperwidth/nx-xmargin;
real height=settings.paperheight/ny-ymargin;
@@ -36,4 +34,3 @@ pair size=size(f)+(xmargin,ymargin);
for(int i=0; i < nx; ++i)
for(int j=0; j < ny; ++j)
add(shift(realmult(size,(i,j)))*f);
-
diff --git a/graphics/asymptote/examples/cyclohexane.asy b/graphics/asymptote/examples/cyclohexane.asy
index 11b01551c8..fb29287040 100644
--- a/graphics/asymptote/examples/cyclohexane.asy
+++ b/graphics/asymptote/examples/cyclohexane.asy
@@ -36,8 +36,6 @@ triple h12=rotate(120,c6,c5)*h11;
pen Black=gray(0.4);
-defaultrender=render(compression=Zero,merge=true);
-
draw(shift(c1)*carbon,Black);
draw(shift(c2)*carbon,Black);
draw(shift(c3)*carbon,Black);
@@ -45,7 +43,6 @@ draw(shift(c4)*carbon,Black);
draw(shift(c5)*carbon,Black);
draw(shift(c6)*carbon,Black);
-
material White=material(diffusepen=gray(0.4),emissivepen=gray(0.6));
draw(shift(h1)*hydrogen,White);
@@ -61,7 +58,6 @@ draw(shift(h10)*hydrogen,White);
draw(shift(h11)*hydrogen,White);
draw(shift(h12)*hydrogen,White);
-
pen thick=linewidth(10);
draw(c1--c2--c3--c4--c5--c6--cycle,thick);
diff --git a/graphics/asymptote/examples/elevation.asy b/graphics/asymptote/examples/elevation.asy
index 32dbde86c0..e7495c1320 100644
--- a/graphics/asymptote/examples/elevation.asy
+++ b/graphics/asymptote/examples/elevation.asy
@@ -6,8 +6,6 @@ currentprojection=orthographic(0.8,1,1);
size(400,300,IgnoreAspect);
-defaultrender.merge=true;
-
real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
diff --git a/graphics/asymptote/examples/extrudedcontour.asy b/graphics/asymptote/examples/extrudedcontour.asy
index 29b12b5c38..75edda6f67 100644
--- a/graphics/asymptote/examples/extrudedcontour.asy
+++ b/graphics/asymptote/examples/extrudedcontour.asy
@@ -2,9 +2,7 @@ import contour;
import palette;
import graph3;
-defaultrender.merge=true;
-
-currentprojection=orthographic(25,10,10);
+currentprojection=orthographic(dir(60,25));
size(0,12cm);
real a=3;
real b=4;
@@ -22,4 +20,3 @@ surface s=surface(f,(0,0),(10,10),20,Spline);
s.colors(palette(s.map(zpart),Rainbow()+opacity(0.5)));
draw(s);
axes3("$x$","$y$","$z$",Arrow3);
-
diff --git a/graphics/asymptote/examples/filesurface.asy b/graphics/asymptote/examples/filesurface.asy
index bfa500ebf5..f51b0cd3e6 100644
--- a/graphics/asymptote/examples/filesurface.asy
+++ b/graphics/asymptote/examples/filesurface.asy
@@ -3,34 +3,21 @@ import palette;
size3(200,IgnoreAspect);
+currentprojection=perspective(dir(68,225));
+
file in=input("filesurface.dat").line();
real[] x=in;
real[] y=in;
real[][] z=in;
-surface s=surface(z,x,y,linear,linear);
-real[] level=uniform(min(z)*(1-sqrtEpsilon),max(z)*(1+sqrtEpsilon),4);
+surface s=surface(z,x,y);
+real[] level=uniform(min(z)*(1-sqrtEpsilon),max(z)*(1+sqrtEpsilon),256);
s.colors(palette(s.map(new real(triple v) {return find(level >= v.z);}),
Rainbow()));
-draw(s,meshpen=thick(),render(merge=true));
-
-triple m=currentpicture.userMin();
-triple M=currentpicture.userMax();
-triple target=0.5*(m+M);
+draw(s,meshpen=thick(),render(tessellate=true));
xaxis3("$x$",Bounds,InTicks);
yaxis3("$y$",Bounds,InTicks(Step=1,step=0.1));
zaxis3("$z$",Bounds,InTicks);
-
-/*
- picture palette;
- size3(palette,1cm);
- draw(palette,unitcube,red);
- frame F=palette.fit3();
- add(F,(M.x,m.y,m.z));
-*/
-
-currentprojection=perspective(camera=target+realmult(dir(68,225),M-m),
- target=target);
diff --git a/graphics/asymptote/examples/gamma3.asy b/graphics/asymptote/examples/gamma3.asy
index 6fc56065cb..87ec463de9 100644
--- a/graphics/asymptote/examples/gamma3.asy
+++ b/graphics/asymptote/examples/gamma3.asy
@@ -2,7 +2,7 @@ import graph3;
import palette;
size(12cm,IgnoreAspect);
-currentprojection=orthographic(1,-2,1);
+currentprojection=orthographic(dir(80,290));
real X=4.5;
real M=abs(gamma((X,0)));
@@ -22,7 +22,7 @@ real Arg(triple v)
}
s.colors(palette(s.map(Arg),Wheel()));
-draw(s,render(compression=Low,merge=true));
+draw(s,render(tessellate=false));
real xmin=point((-1,-1,-1)).x;
real xmax=point((1,1,1)).x;
diff --git a/graphics/asymptote/examples/pdb.asy b/graphics/asymptote/examples/pdb.asy
index 68cec9e367..ff773beea2 100644
--- a/graphics/asymptote/examples/pdb.asy
+++ b/graphics/asymptote/examples/pdb.asy
@@ -7,8 +7,9 @@ import cpkcolors;
currentlight=White;
//currentlight=nolight;
-defaultrender.merge=true; // Fast low-quality rendering
-//defaultrender.merge=false; // Slow high-quality rendering
+//defaultrender.merge=true; // Fast low-quality PRC rendering
+//defaultrender.merge=false; // Slow high-quality PRC rendering
+
bool pixel=false; // Set to true to draw dots as pixels.
real width=6;
diff --git a/graphics/asymptote/examples/projectelevation.asy b/graphics/asymptote/examples/projectelevation.asy
index 6ffe512663..6e6bc2bed3 100644
--- a/graphics/asymptote/examples/projectelevation.asy
+++ b/graphics/asymptote/examples/projectelevation.asy
@@ -2,9 +2,10 @@ import graph3;
import grid3;
import palette;
-currentprojection=orthographic(0.8,1,2);
size(400,300,IgnoreAspect);
+currentprojection=orthographic(dir(50,50));
+
real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
@@ -12,6 +13,6 @@ surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
surface S=planeproject(unitsquare3)*s;
S.colors(palette(s.map(zpart),Rainbow()));
draw(S,nolight);
-draw(s,lightgray+opacity(0.7));
+draw(s,lightgray+opacity(0.7),render(tessellate=false));
grid3(XYZgrid);
diff --git a/graphics/asymptote/examples/slidedemo.asy b/graphics/asymptote/examples/slidedemo.asy
index 107564601f..99833e0ee6 100644
--- a/graphics/asymptote/examples/slidedemo.asy
+++ b/graphics/asymptote/examples/slidedemo.asy
@@ -1,3 +1,5 @@
+settings.tex="pdflatex";
+
// Slide demo.
// Command-line options to enable stepping and/or reverse video:
// asy [-u stepping=true] [-u reverse=true] [-u itemstep=true] slidedemo
diff --git a/graphics/asymptote/examples/smoothelevation.asy b/graphics/asymptote/examples/smoothelevation.asy
index a7995b7079..310e2c201d 100644
--- a/graphics/asymptote/examples/smoothelevation.asy
+++ b/graphics/asymptote/examples/smoothelevation.asy
@@ -6,7 +6,7 @@ currentlight=Viewport;
if(settings.render <= 0) settings.prc=false;
-currentprojection=orthographic(1,2,13);
+currentprojection=orthographic(dir(40,60));
size(400,300,IgnoreAspect);
@@ -15,7 +15,7 @@ real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
surface s=surface(f,(-1/2,-1/2),(1/2,1/2),20,Spline);
s.colors(palette(s.map(zpart),Rainbow()));
-draw(s);
+draw(s,render(tessellate=false));
scale(true);
diff --git a/graphics/asymptote/examples/soccerball.asy b/graphics/asymptote/examples/soccerball.asy
index 68a95edbdc..b83245b10f 100644
--- a/graphics/asymptote/examples/soccerball.asy
+++ b/graphics/asymptote/examples/soccerball.asy
@@ -3,8 +3,6 @@ size(400);
currentlight.background=palegreen;
settings.digits=15;
-defaultrender=render(compression=Zero,merge=true);
-
real c=(1+sqrt(5))/2;
triple[] z={(c,1,0),(-c,1,0),(-c,-1,0),(c,-1,0)};
diff --git a/graphics/asymptote/examples/splitpatch.asy b/graphics/asymptote/examples/splitpatch.asy
index 1fa9325f4c..ff870c7b85 100644
--- a/graphics/asymptote/examples/splitpatch.asy
+++ b/graphics/asymptote/examples/splitpatch.asy
@@ -80,8 +80,6 @@ triple[][] B=
split S=split(B,A);
-defaultrender.merge=true;
-
for(int i=0; i < S.S[0].s.length; ++i)
draw(surface(S.S[0].s[i]),Pen(i));
diff --git a/graphics/asymptote/examples/teapot.asy b/graphics/asymptote/examples/teapot.asy
index 7a12cc3a66..26a2b129af 100644
--- a/graphics/asymptote/examples/teapot.asy
+++ b/graphics/asymptote/examples/teapot.asy
@@ -203,21 +203,21 @@ triple[][][] Q0={
};
-surface regularize(triple[][] P, real fraction=0.02)
+surface regularize(triple[][] P, real fraction=0.002)
{
triple[][][] B=hsplit(P,fraction);
triple[][] T=B[0];
- surface s=surface(T[0][0]..controls T[0][1] and T[0][2]..
- T[0][3]..controls T[1][3] and T[2][3]..
- T[3][3]..controls T[3][2] and T[3][1]..cycle);
+ surface s=surface(T[0][0]..controls T[3][1] and T[3][2]..
+ T[3][3]..controls T[2][3] and T[1][3]..
+ T[0][3]..controls T[0][2] and T[0][1]..cycle);
s.append(surface(patch(B[1])));
return s;
}
surface S=surface(Q);
for(triple[][] q : Q0)
- // S.append(regularize(q));
- S.append(surface(patch(q)));
+ S.append(regularize(q));
+// S.append(surface(patch(q)));
pen color;
real metallic;
diff --git a/graphics/asymptote/examples/truncatedIcosahedron.asy b/graphics/asymptote/examples/truncatedIcosahedron.asy
index 092f96a4e6..d69cec9382 100644
--- a/graphics/asymptote/examples/truncatedIcosahedron.asy
+++ b/graphics/asymptote/examples/truncatedIcosahedron.asy
@@ -2,8 +2,6 @@ import graph3;
size(200);
-defaultrender.merge=true;
-
real c=(1+sqrt(5))/2;
triple[] z={(c,1,0),(-c,1,0),(-c,-1,0),(c,-1,0)};
@@ -64,6 +62,3 @@ for(int i=0; i < P.length; ++i) {
draw(surface(reverse(operator--(...fiveout)--cycle)^^
operator--(...fivein)--cycle,planar=true),cyan);
}
-
-
-
diff --git a/graphics/asymptote/examples/twistedtubes.asy b/graphics/asymptote/examples/twistedtubes.asy
index ee25cd0bd3..316b875cca 100644
--- a/graphics/asymptote/examples/twistedtubes.asy
+++ b/graphics/asymptote/examples/twistedtubes.asy
@@ -22,8 +22,6 @@ s2.colors(palette(s2.map(f),Rainbow));
s3.colors(palette(s3.map(f),Rainbow));
s4.colors(palette(s4.map(f),Rainbow));
-defaultrender.merge=true;
-
draw(s1);
draw(s2);
draw(s3);
diff --git a/graphics/asymptote/exp.cc b/graphics/asymptote/exp.cc
index 8f8ebae097..f683330158 100644
--- a/graphics/asymptote/exp.cc
+++ b/graphics/asymptote/exp.cc
@@ -103,7 +103,7 @@ void exp::testCachedType(coenv &e) {
em.compiler(getPos());
em << "cached type '" << *ct
<< "' doesn't match actual type '" << *t << "'";
- em.sync();
+ em.sync(true);
}
}
}
diff --git a/graphics/asymptote/genv.cc b/graphics/asymptote/genv.cc
index 65e132ef56..f58294101c 100644
--- a/graphics/asymptote/genv.cc
+++ b/graphics/asymptote/genv.cc
@@ -121,7 +121,7 @@ void genv::checkRecursion(string filename) {
inTranslation.end()) {
em.sync();
em << "error: recursive loading of module '" << filename << "'\n";
- em.sync();
+ em.sync(true);
throw handled_error();
}
}
diff --git a/graphics/asymptote/glrender.cc b/graphics/asymptote/glrender.cc
index c64dc26d0d..a4d1761948 100644
--- a/graphics/asymptote/glrender.cc
+++ b/graphics/asymptote/glrender.cc
@@ -439,6 +439,7 @@ void home(bool webgl=false)
}
double T[16];
+double Tup[16];
#ifdef HAVE_GL
@@ -568,7 +569,7 @@ void initComputeShaders()
shaderParams.push_back(s.str().c_str());
s2 << "BLOCKSIZE " << gl::blockSize << "u" << endl;
shaderParams.push_back(s2.str().c_str());
- GLuint rc=compileAndLinkShader(shaders,shaderParams,true,false,true);
+ GLuint rc=compileAndLinkShader(shaders,shaderParams,true,false,true,true);
if(rc == 0) {
GPUindexing=false; // Compute shaders are unavailable.
if(settings::verbose > 2)
@@ -662,7 +663,8 @@ void initShaders()
if(GPUcompress)
shaderParams.push_back("GPUCOMPRESS");
shaders[1]=ShaderfileModePair(count.c_str(),GL_FRAGMENT_SHADER);
- camp::countShader=compileAndLinkShader(shaders,shaderParams,true);
+ camp::countShader=compileAndLinkShader(shaders,shaderParams,
+ true,false,false,true);
if(camp::countShader)
shaderParams.push_back("HAVE_SSBO");
#else
@@ -697,8 +699,8 @@ void initShaders()
shaderParams.push_back("NORMAL");
if(interlock) shaderParams.push_back("HAVE_INTERLOCK");
- camp::materialShader[0]=compileAndLinkShader(shaders,shaderParams,ssbo,
- interlock);
+ camp::materialShader[0]=compileAndLinkShader(shaders,shaderParams,
+ ssbo,interlock,false,true);
if(interlock && !camp::materialShader[0]) {
shaderParams.pop_back();
interlock=false;
@@ -1660,7 +1662,9 @@ void showCamera()
cout << "," << endl << indent << "angle=" << P.angle;
if(P.viewportshift != pair(0.0,0.0))
cout << "," << endl << indent << "viewportshift=" << P.viewportshift*Zoom;
- if(!orthographic)
+ if(orthographic)
+ cout << ",center=false";
+ else
cout << "," << endl << indent << "autoadjust=false";
cout << ");" << endl;
}
@@ -1781,7 +1785,7 @@ projection camera(bool user)
double R3=Rotate[j4+3];
double T4ij=T[i4+j];
sumCamera += T4ij*(R3-cx*R0-cy*R1-cz*R2);
- sumUp += T4ij*R1;
+ sumUp += Tup[i4+j]*R1;
sumTarget += T4ij*(R3-cx*R0-cy*R1);
}
vCamera[i]=sumCamera;
@@ -1907,7 +1911,7 @@ bool NVIDIA()
void glrender(const string& prefix, const picture *pic, const string& format,
double width, double height, double angle, double zoom,
const triple& m, const triple& M, const pair& shift,
- const pair& margin, double *t,
+ const pair& margin, double *t, double *tup,
double *background, size_t nlightsin, triple *lights,
double *diffuse, double *specular, bool view, int oldpid)
{
@@ -1987,6 +1991,9 @@ void glrender(const string& prefix, const picture *pic, const string& format,
for(int i=0; i < 16; ++i)
T[i]=t[i];
+ for(int i=0; i < 16; ++i)
+ Tup[i]=tup[i];
+
static bool initialized=false;
if(!(initialized && (interact::interactive ||
diff --git a/graphics/asymptote/glrender.h b/graphics/asymptote/glrender.h
index 1c140584a9..2b3285b157 100644
--- a/graphics/asymptote/glrender.h
+++ b/graphics/asymptote/glrender.h
@@ -171,7 +171,8 @@ projection camera(bool user=true);
void glrender(const string& prefix, const camp::picture* pic,
const string& format, double width, double height, double angle,
double zoom, const camp::triple& m, const camp::triple& M,
- const camp::pair& shift, const camp::pair& margin, double *t,
+ const camp::pair& shift, const camp::pair& margin,
+ double *t, double *tup,
double *background, size_t nlights, camp::triple *lights,
double *diffuse, double *specular, bool view, int oldpid=0);
diff --git a/graphics/asymptote/impdatum.cc b/graphics/asymptote/impdatum.cc
index 9a4d09d1bf..5597b3ee95 100644
--- a/graphics/asymptote/impdatum.cc
+++ b/graphics/asymptote/impdatum.cc
@@ -401,7 +401,8 @@ ImpDatum *callDatum(ImpDatum *callee, ImpArguments *args)
types::ty *t = callex.getType(e);
if (t->isError()) {
// Run for errors.
- runExp(&callex); em.sync();
+ runExp(&callex);
+ em.sync(true);
return datumError("invalid call");
}
diff --git a/graphics/asymptote/jsfile.cc b/graphics/asymptote/jsfile.cc
index 7dc95c9bb6..6afbd9efc7 100644
--- a/graphics/asymptote/jsfile.cc
+++ b/graphics/asymptote/jsfile.cc
@@ -207,9 +207,10 @@ void jsfile::finish(string name)
size_t ncenters=drawElement::centers.size();
if(ncenters > 0) {
out << s << "Centers=[";
- for(size_t i=0; i < ncenters; ++i)
+ size_t last=ncenters-1;
+ for(size_t i=0; i < last; ++i)
out << newl << drawElement::centers[i] << ",";
- out << newl << "];" << newl;
+ out << newl << drawElement::centers[last] << newl << "];" << newl;
}
out << "</script>"
<< newl << "</head>"
@@ -235,21 +236,23 @@ void jsfile::addIndices(const uint32_t *I)
void jsfile::addRawPatch(triple const* controls, size_t n,
const prc::RGBAColour *c, size_t nc)
{
- out << "patch([" << newl;
- size_t last=n-1;
- for(size_t i=0; i < last; ++i)
- out << controls[i] << "," << newl;
- out << controls[last] << newl << "],"
- << drawElement::centerIndex << "," << materialIndex;
- if(c) {
- out << ",[" << newl;
- for(size_t i=0; i < nc; ++i) {
- addColor(c[i]);
- out << "," << newl;
+ if(n) {
+ out << "patch([" << newl;
+ size_t last=n-1;
+ for(size_t i=0; i < last; ++i)
+ out << controls[i] << "," << newl;
+ out << controls[last] << newl << "],"
+ << drawElement::centerIndex << "," << materialIndex;
+ if(c) {
+ out << ",[" << newl;
+ for(size_t i=0; i < nc; ++i) {
+ addColor(c[i]);
+ out << "," << newl;
+ }
+ out << "]";
}
- out << "]";
+ out << ");" << newl << newl;
}
- out << ");" << newl << newl;
}
void jsfile::addCurve(const triple& z0, const triple& c0,
@@ -294,35 +297,60 @@ void jsfile::addTriangles(size_t nP, const triple* P, size_t nN,
size_t nI, const uint32_t (*PI)[3],
const uint32_t (*NI)[3], const uint32_t (*CI)[3])
{
- for(size_t i=0; i < nP; ++i)
- out << "Positions.push(" << P[i] << ");" << newl;
-
- for(size_t i=0; i < nN; ++i)
- out << "Normals.push(" << N[i] << ");" << newl;
+ if(nP) {
+ out << "Positions=[";
+ size_t last=nP-1;
+ for(size_t i=0; i < last; ++i)
+ out << newl << P[i] << ",";
+ out << newl << P[last] << newl << "];" << newl;
+ }
- for(size_t i=0; i < nC; ++i) {
- out << "Colors.push(";
- addColor(C[i]);
- out << ");" << newl;
+ if(nN) {
+ size_t last=nN-1;
+ out << "Normals=[";
+ for(size_t i=0; i < last; ++i)
+ out << newl << N[i] << ",";
+ out << newl << N[last] << newl << "];" << newl;
}
- for(size_t i=0; i < nI; ++i) {
- out << "Indices.push([";
- const uint32_t *PIi=PI[i];
- const uint32_t *NIi=NI[i];
- bool keepNI=distinct(NIi,PIi);
- bool keepCI=nC && distinct(CI[i],PIi);
- addIndices(PIi);
- if(keepNI || keepCI) {
+ if(nC) {
+ size_t last=nC-1;
+ out << "Colors=[";
+ for(size_t i=0; i < last; ++i) {
+ out << newl;
+ addColor(C[i]);
out << ",";
- if(keepNI) addIndices(NIi);
}
- if(keepCI) {
- out << ",";
- addIndices(CI[i]);
+ out << newl;
+ addColor(C[last]);
+ out << newl << "];" << newl;
+ }
+
+ if(nI) {
+ out << "Indices=[";
+ size_t last=nI-1;
+ for(size_t i=0; i < nI; ++i) {
+ const uint32_t *PIi=PI[i];
+ const uint32_t *NIi=NI[i];
+ bool keepNI=distinct(NIi,PIi);
+ bool keepCI=nC && distinct(CI[i],PIi);
+ out << newl << "[";
+ addIndices(PIi);
+ if(keepNI || keepCI) {
+ out << ",";
+ if(keepNI) addIndices(NIi);
+ }
+ if(keepCI) {
+ out << ",";
+ addIndices(CI[i]);
+ }
+ out << "]";
+ if(i < last)
+ out << ",";
}
- out << "]);" << newl;
+ out << newl << "];" << newl;
}
+
out << "triangles("
<< drawElement::centerIndex << "," << materialIndex
<< ");" << newl << newl;
diff --git a/graphics/asymptote/lex.yy.cc b/graphics/asymptote/lex.yy.cc
index 0f0ea99214..56f0af8529 100644
--- a/graphics/asymptote/lex.yy.cc
+++ b/graphics/asymptote/lex.yy.cc
@@ -952,7 +952,7 @@ void reportEOF() {
assert(eof);
error();
em << eofMessage;
- em.sync();
+ em.sync(true);
}
position stringpos; // The position of the start of the string.
diff --git a/graphics/asymptote/parser.cc b/graphics/asymptote/parser.cc
index cdda1f9a28..aa1984a174 100644
--- a/graphics/asymptote/parser.cc
+++ b/graphics/asymptote/parser.cc
@@ -59,7 +59,7 @@ void error(const string& filename)
{
em.sync();
em << "error: could not load module '" << filename << "'\n";
- em.sync();
+ em.sync(true);
throw handled_error();
}
}
diff --git a/graphics/asymptote/picture.cc b/graphics/asymptote/picture.cc
index 8ea6e3bf86..0f583020e1 100644
--- a/graphics/asymptote/picture.cc
+++ b/graphics/asymptote/picture.cc
@@ -1323,6 +1323,7 @@ struct Communicate : public gc {
pair shift;
pair margin;
double *t;
+ double *tup;
double *background;
size_t nlights;
triple *lights;
@@ -1344,15 +1345,17 @@ void glrenderWrapper()
#endif
if(allowRender)
glrender(com.prefix,com.pic,com.format,com.width,com.height,com.angle,
- com.zoom,com.m,com.M,com.shift,com.margin,com.t,com.background,
- com.nlights,com.lights,com.diffuse,com.specular,com.view);
+ com.zoom,com.m,com.M,com.shift,com.margin,com.t,com.tup,
+ com.background,com.nlights,com.lights,com.diffuse,com.specular,
+ com.view);
#endif
}
bool picture::shipout3(const string& prefix, const string& format,
double width, double height, double angle, double zoom,
const triple& m, const triple& M, const pair& shift,
- const pair& margin, double *t, double *background,
+ const pair& margin, double *t, double *tup,
+ double *background,
size_t nlights, triple *lights, double *diffuse,
double *specular, bool view)
{
@@ -1444,6 +1447,7 @@ bool picture::shipout3(const string& prefix, const string& format,
com.shift=shift;
com.margin=margin;
com.t=t;
+ com.tup=tup;
com.background=background;
com.nlights=nlights;
com.lights=lights;
@@ -1483,8 +1487,8 @@ bool picture::shipout3(const string& prefix, const string& format,
}
#if HAVE_LIBGLM
- glrender(prefix,pic,outputformat,width,height,angle,zoom,m,M,shift,margin,t,
- background,nlights,lights,diffuse,specular,View,oldpid);
+ glrender(prefix,pic,outputformat,width,height,angle,zoom,m,M,shift,margin,
+ t,tup,background,nlights,lights,diffuse,specular,View,oldpid);
if(format3d) {
string name=buildname(prefix,format);
diff --git a/graphics/asymptote/picture.h b/graphics/asymptote/picture.h
index 61b3bd8c4f..b0a60be566 100644
--- a/graphics/asymptote/picture.h
+++ b/graphics/asymptote/picture.h
@@ -91,7 +91,7 @@ public:
bool shipout3(const string& prefix, const string& format,
double width, double height, double angle, double zoom,
const triple& m, const triple& M, const pair& shift,
- const pair& margin, double *t,
+ const pair& margin, double *t, double *tup,
double *background, size_t nlights, triple *lights,
double *diffuse, double *specular, bool view);
diff --git a/graphics/asymptote/revision.cc b/graphics/asymptote/revision.cc
index 7f032d5189..c3ea1e5f94 100644
--- a/graphics/asymptote/revision.cc
+++ b/graphics/asymptote/revision.cc
@@ -1,2 +1,2 @@
-const char *REVISION="2.90";
+const char *REVISION="2.91";
const char *AsyGLVersion="1.02";
diff --git a/graphics/asymptote/runpicture.cc b/graphics/asymptote/runpicture.cc
index e8a153463a..e3e75a179b 100644
--- a/graphics/asymptote/runpicture.cc
+++ b/graphics/asymptote/runpicture.cc
@@ -766,7 +766,7 @@ void gen_runpicture42(stack *Stack)
}
#line 470 "runpicture.in"
-// void shipout3(string prefix, picture *f, string format=emptystring, real width, real height, real angle, real zoom, triple m, triple M, pair shift, pair margin, realarray2 *t, realarray *background, triplearray *lights, realarray2 *diffuse, realarray2 *specular, bool view=true);
+// void shipout3(string prefix, picture *f, string format=emptystring, real width, real height, real angle, real zoom, triple m, triple M, pair shift, pair margin, realarray2 *t, realarray2 *tup, realarray *background, triplearray *lights, realarray2 *diffuse, realarray2 *specular, bool view=true);
void gen_runpicture43(stack *Stack)
{
bool view=vm::pop<bool>(Stack,true);
@@ -774,6 +774,7 @@ void gen_runpicture43(stack *Stack)
realarray2 * diffuse=vm::pop<realarray2 *>(Stack);
triplearray * lights=vm::pop<triplearray *>(Stack);
realarray * background=vm::pop<realarray *>(Stack);
+ realarray2 * tup=vm::pop<realarray2 *>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
pair margin=vm::pop<pair>(Stack);
pair shift=vm::pop<pair>(Stack);
@@ -786,44 +787,46 @@ void gen_runpicture43(stack *Stack)
string format=vm::pop<string>(Stack,emptystring);
picture * f=vm::pop<picture *>(Stack);
string prefix=vm::pop<string>(Stack);
-#line 475 "runpicture.in"
+#line 476 "runpicture.in"
size_t n=checkArrays(lights,diffuse);
checkEqual(n,checkArray(specular));
- real *T,*Background,*Diffuse,*Specular;
+ real *T,*Tup,*Background,*Diffuse,*Specular;
triple *Lights;
copyArray2C(T,t,true,4);
+ copyArray2C(Tup,tup,true,4);
copyArrayC(Background,background);
copyArrayC(Lights,lights);
copyArray2C(Diffuse,diffuse,false,4,UseGC);
copyArray2C(Specular,specular,false,4,UseGC);
- f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,margin,T,
+ f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,margin,T,Tup,
Background,n,Lights,Diffuse,Specular,view);
delete[] Background;
delete[] T;
+ delete[] Tup;
}
-#line 495 "runpicture.in"
+#line 498 "runpicture.in"
// void shipout3(string prefix, picture *f, string format=defaultformat3);
void gen_runpicture44(stack *Stack)
{
string format=vm::pop<string>(Stack,defaultformat3);
picture * f=vm::pop<picture *>(Stack);
string prefix=vm::pop<string>(Stack);
-#line 496 "runpicture.in"
+#line 499 "runpicture.in"
f->shipout3(prefix,format);
}
-#line 500 "runpicture.in"
+#line 503 "runpicture.in"
// void xmap(string key, transform t=identity);
void gen_runpicture45(stack *Stack)
{
transform t=vm::pop<transform>(Stack,identity);
string key=vm::pop<string>(Stack);
-#line 501 "runpicture.in"
+#line 504 "runpicture.in"
processDataStruct *P=&processData();
xmap_t &xmap=P->xmap;
xmap_t::iterator p=xmap.find(key);
@@ -837,14 +840,14 @@ void gen_runpicture45(stack *Stack)
P->xmapCount++;
}
-#line 515 "runpicture.in"
+#line 518 "runpicture.in"
// void deconstruct(picture *f, picture *preamble=NULL, transform T=identity);
void gen_runpicture46(stack *Stack)
{
transform T=vm::pop<transform>(Stack,identity);
picture * preamble=vm::pop<picture *>(Stack,NULL);
picture * f=vm::pop<picture *>(Stack);
-#line 516 "runpicture.in"
+#line 519 "runpicture.in"
unsigned level=0;
bool first=pdf(getSetting<string>("tex"));
@@ -959,7 +962,7 @@ void gen_runpicture46(stack *Stack)
// Three-dimensional picture and surface operations
// Bezier curve
-#line 631 "runpicture.in"
+#line 634 "runpicture.in"
// void _draw(picture *f, path3 g, triple center=Zero, penarray *p, real opacity, real shininess, real metallic, real fresnel0, Int interaction=0);
void gen_runpicture47(stack *Stack)
{
@@ -972,7 +975,7 @@ void gen_runpicture47(stack *Stack)
triple center=vm::pop<triple>(Stack,Zero);
path3 g=vm::pop<path3>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 634 "runpicture.in"
+#line 637 "runpicture.in"
size_t n=g.size();
for(unsigned int i=0; i < n; ++i)
f->append(new drawPath3(g.subpath((Int) i,Int(i+1)),center,*p,opacity,
@@ -981,7 +984,7 @@ void gen_runpicture47(stack *Stack)
}
// Bezier patch
-#line 643 "runpicture.in"
+#line 646 "runpicture.in"
// void draw(picture *f, triplearray2 *P, triple center, bool straight, penarray *p, real opacity, real shininess, real metallic, real fresnel0, penarray *colors, Int interaction, Int digits, bool primitive=false);
void gen_runpicture48(stack *Stack)
{
@@ -998,7 +1001,7 @@ void gen_runpicture48(stack *Stack)
triple center=vm::pop<triple>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 647 "runpicture.in"
+#line 650 "runpicture.in"
f->append(new drawBezierPatch(*P,center,straight,*p,opacity,shininess,
metallic,fresnel0,*colors,
(Interaction) intcast(interaction),
@@ -1006,7 +1009,7 @@ void gen_runpicture48(stack *Stack)
}
// Bezier triangle
-#line 655 "runpicture.in"
+#line 658 "runpicture.in"
// void drawbeziertriangle(picture *f, triplearray2 *P, triple center, bool straight, penarray *p, real opacity, real shininess, real metallic, real fresnel0, penarray *colors, Int interaction, Int digits, bool primitive=false);
void gen_runpicture49(stack *Stack)
{
@@ -1023,7 +1026,7 @@ void gen_runpicture49(stack *Stack)
triple center=vm::pop<triple>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 660 "runpicture.in"
+#line 663 "runpicture.in"
f->append(new drawBezierTriangle(*P,center,straight,*p,opacity,shininess,
metallic,fresnel0,*colors,
(Interaction) intcast(interaction),
@@ -1031,7 +1034,7 @@ void gen_runpicture49(stack *Stack)
}
// General NURBS curve
-#line 668 "runpicture.in"
+#line 671 "runpicture.in"
// void draw(picture *f, triplearray *P, realarray *knot, realarray *weights=emptyarray, pen p);
void gen_runpicture50(stack *Stack)
{
@@ -1040,12 +1043,12 @@ void gen_runpicture50(stack *Stack)
realarray * knot=vm::pop<realarray *>(Stack);
triplearray * P=vm::pop<triplearray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 670 "runpicture.in"
+#line 673 "runpicture.in"
f->append(new drawNurbsPath3(*P,knot,weights,p));
}
// General NURBS surface
-#line 675 "runpicture.in"
+#line 678 "runpicture.in"
// void draw(picture *f, triplearray2 *P, realarray *uknot, realarray *vknot, realarray2 *weights=emptyarray, penarray *p, real opacity, real shininess,real metallic, real fresnel0, penarray *colors);
void gen_runpicture51(stack *Stack)
{
@@ -1060,13 +1063,13 @@ void gen_runpicture51(stack *Stack)
realarray * uknot=vm::pop<realarray *>(Stack);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 678 "runpicture.in"
+#line 681 "runpicture.in"
f->append(new drawNurbs(*P,uknot,vknot,weights,*p,opacity,shininess,
metallic,fresnel0,*colors));
}
// Sphere primitive
-#line 684 "runpicture.in"
+#line 687 "runpicture.in"
// void drawSphere(picture *f, realarray2 *t, bool half=false, penarray *p, real opacity, real shininess, real metallic, real fresnel0, Int type);
void gen_runpicture52(stack *Stack)
{
@@ -1079,13 +1082,13 @@ void gen_runpicture52(stack *Stack)
bool half=vm::pop<bool>(Stack,false);
realarray2 * t=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 687 "runpicture.in"
+#line 690 "runpicture.in"
f->append(new drawSphere(*t,half,*p,opacity,shininess,metallic,fresnel0,
intcast(type)));
}
// Cylinder primitive
-#line 693 "runpicture.in"
+#line 696 "runpicture.in"
// void drawCylinder(picture *f, realarray2 *t, penarray *p, real opacity, real shininess, real metallic, real fresnel0, bool core=false);
void gen_runpicture53(stack *Stack)
{
@@ -1097,12 +1100,12 @@ void gen_runpicture53(stack *Stack)
penarray * p=vm::pop<penarray *>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 696 "runpicture.in"
+#line 699 "runpicture.in"
f->append(new drawCylinder(*t,*p,opacity,shininess,metallic,fresnel0,core));
}
// Disk primitive
-#line 701 "runpicture.in"
+#line 704 "runpicture.in"
// void drawDisk(picture *f, realarray2 *t, penarray *p, real opacity, real shininess, real metallic, real fresnel0);
void gen_runpicture54(stack *Stack)
{
@@ -1113,12 +1116,12 @@ void gen_runpicture54(stack *Stack)
penarray * p=vm::pop<penarray *>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 703 "runpicture.in"
+#line 706 "runpicture.in"
f->append(new drawDisk(*t,*p,opacity,shininess,metallic,fresnel0));
}
// Tube primitive
-#line 708 "runpicture.in"
+#line 711 "runpicture.in"
// void drawTube(picture *f, triplearray *g, real width, penarray *p, real opacity, real shininess, real metallic, real fresnel0, triple min, triple max, bool core=false);
void gen_runpicture55(stack *Stack)
{
@@ -1133,13 +1136,13 @@ void gen_runpicture55(stack *Stack)
real width=vm::pop<real>(Stack);
triplearray * g=vm::pop<triplearray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 711 "runpicture.in"
+#line 714 "runpicture.in"
f->append(new drawTube(*g,width,*p,opacity,shininess,metallic,fresnel0,
min,max,core));
}
// Draw pixel
-#line 717 "runpicture.in"
+#line 720 "runpicture.in"
// void drawpixel(picture *f, triple v, pen p, real width=1.0);
void gen_runpicture56(stack *Stack)
{
@@ -1147,12 +1150,12 @@ void gen_runpicture56(stack *Stack)
pen p=vm::pop<pen>(Stack);
triple v=vm::pop<triple>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 718 "runpicture.in"
+#line 721 "runpicture.in"
f->append(new drawPixel(v,p,width));
}
// Draw triangles
-#line 723 "runpicture.in"
+#line 726 "runpicture.in"
// void draw(picture *f, triplearray *v, Intarray2 *vi, triple center=Zero, triplearray *n, Intarray2 *ni, penarray *p, real opacity, real shininess, real metallic, real fresnel0, penarray *c=emptyarray, Intarray2 *ci=emptyarray, Int interaction);
void gen_runpicture57(stack *Stack)
{
@@ -1170,64 +1173,64 @@ void gen_runpicture57(stack *Stack)
Intarray2 * vi=vm::pop<Intarray2 *>(Stack);
triplearray * v=vm::pop<triplearray *>(Stack);
picture * f=vm::pop<picture *>(Stack);
-#line 728 "runpicture.in"
+#line 731 "runpicture.in"
f->append(new drawTriangles(*v,*vi,center,*n,*ni,*p,opacity,shininess,
metallic,fresnel0,*c,*ci,
(Interaction) intcast(interaction)));
}
-#line 734 "runpicture.in"
+#line 737 "runpicture.in"
// triple min3(picture *f);
void gen_runpicture58(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 735 "runpicture.in"
+#line 738 "runpicture.in"
{Stack->push<triple>(f->bounds3().Min()); return;}
}
-#line 739 "runpicture.in"
+#line 742 "runpicture.in"
// triple max3(picture *f);
void gen_runpicture59(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 740 "runpicture.in"
+#line 743 "runpicture.in"
{Stack->push<triple>(f->bounds3().Max()); return;}
}
-#line 744 "runpicture.in"
+#line 747 "runpicture.in"
// triple size3(picture *f);
void gen_runpicture60(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 745 "runpicture.in"
+#line 748 "runpicture.in"
bbox3 b=f->bounds3();
{Stack->push<triple>(b.Max()-b.Min()); return;}
}
-#line 750 "runpicture.in"
+#line 753 "runpicture.in"
// pair minratio(picture *f);
void gen_runpicture61(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 751 "runpicture.in"
+#line 754 "runpicture.in"
{Stack->push<pair>(f->ratio(::min)); return;}
}
-#line 755 "runpicture.in"
+#line 758 "runpicture.in"
// pair maxratio(picture *f);
void gen_runpicture62(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 756 "runpicture.in"
+#line 759 "runpicture.in"
{Stack->push<pair>(f->ratio(::max)); return;}
}
-#line 760 "runpicture.in"
+#line 763 "runpicture.in"
// bool is3D(picture *f);
void gen_runpicture63(stack *Stack)
{
picture * f=vm::pop<picture *>(Stack);
-#line 761 "runpicture.in"
+#line 764 "runpicture.in"
{Stack->push<bool>(f->have3D()); return;}
}
@@ -1324,46 +1327,46 @@ void gen_runpicture_venv(venv &ve)
#line 419 "runpicture.in"
addFunc(ve, run::gen_runpicture42, primVoid(), SYM(_shipout), formal(primString(), SYM(prefix), true, false), formal(primPicture(), SYM(f), false, false), formal(primPicture(), SYM(preamble), true, false), formal(primString(), SYM(format), true, false), formal(primBoolean(), SYM(wait), true, false), formal(primBoolean(), SYM(view), true, false), formal(primTransform(), SYM(t), true, false));
#line 470 "runpicture.in"
- addFunc(ve, run::gen_runpicture43, primVoid(), SYM(shipout3), formal(primString(), SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false), formal(primString(), SYM(format), true, false), formal(primReal(), SYM(width), false, false), formal(primReal(), SYM(height), false, false), formal(primReal(), SYM(angle), false, false), formal(primReal(), SYM(zoom), false, false), formal(primTriple(), SYM(m), false, false), formal(primTriple(), SYM(m), false, false), formal(primPair(), SYM(shift), false, false), formal(primPair(), SYM(margin), false, false), formal(realArray2(), SYM(t), false, false), formal(realArray(), SYM(background), false, false), formal(tripleArray(), SYM(lights), false, false), formal(realArray2(), SYM(diffuse), false, false), formal(realArray2(), SYM(specular), false, false), formal(primBoolean(), SYM(view), true, false));
-#line 495 "runpicture.in"
+ addFunc(ve, run::gen_runpicture43, primVoid(), SYM(shipout3), formal(primString(), SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false), formal(primString(), SYM(format), true, false), formal(primReal(), SYM(width), false, false), formal(primReal(), SYM(height), false, false), formal(primReal(), SYM(angle), false, false), formal(primReal(), SYM(zoom), false, false), formal(primTriple(), SYM(m), false, false), formal(primTriple(), SYM(m), false, false), formal(primPair(), SYM(shift), false, false), formal(primPair(), SYM(margin), false, false), formal(realArray2(), SYM(t), false, false), formal(realArray2(), SYM(tup), false, false), formal(realArray(), SYM(background), false, false), formal(tripleArray(), SYM(lights), false, false), formal(realArray2(), SYM(diffuse), false, false), formal(realArray2(), SYM(specular), false, false), formal(primBoolean(), SYM(view), true, false));
+#line 498 "runpicture.in"
addFunc(ve, run::gen_runpicture44, primVoid(), SYM(shipout3), formal(primString(), SYM(prefix), false, false), formal(primPicture(), SYM(f), false, false), formal(primString(), SYM(format), true, false));
-#line 500 "runpicture.in"
+#line 503 "runpicture.in"
addFunc(ve, run::gen_runpicture45, primVoid(), SYM(xmap), formal(primString(), SYM(key), false, false), formal(primTransform(), SYM(t), true, false));
-#line 515 "runpicture.in"
+#line 518 "runpicture.in"
addFunc(ve, run::gen_runpicture46, primVoid(), SYM(deconstruct), formal(primPicture(), SYM(f), false, false), formal(primPicture(), SYM(preamble), true, false), formal(primTransform(), SYM(t), true, false));
-#line 627 "runpicture.in"
+#line 630 "runpicture.in"
addFunc(ve, run::gen_runpicture47, primVoid(), SYM(_draw), formal(primPicture(), SYM(f), false, false), formal(primPath3(), SYM(g), false, false), formal(primTriple(), SYM(center), true, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primInt(), SYM(interaction), true, false));
-#line 642 "runpicture.in"
+#line 645 "runpicture.in"
addFunc(ve, run::gen_runpicture48, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(center), false, false), formal(primBoolean(), SYM(straight), false, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(penArray(), SYM(colors), false, false), formal(primInt(), SYM(interaction), false, false), formal(primInt(), SYM(digits), false, false), formal(primBoolean(), SYM(primitive), true, false));
-#line 654 "runpicture.in"
+#line 657 "runpicture.in"
addFunc(ve, run::gen_runpicture49, primVoid(), SYM(drawbeziertriangle), formal(primPicture(), SYM(f), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primTriple(), SYM(center), false, false), formal(primBoolean(), SYM(straight), false, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(penArray(), SYM(colors), false, false), formal(primInt(), SYM(interaction), false, false), formal(primInt(), SYM(digits), false, false), formal(primBoolean(), SYM(primitive), true, false));
-#line 667 "runpicture.in"
+#line 670 "runpicture.in"
addFunc(ve, run::gen_runpicture50, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray(), SYM(p), false, false), formal(realArray(), SYM(knot), false, false), formal(realArray(), SYM(weights), true, false), formal(primPen(), SYM(p), false, false));
-#line 674 "runpicture.in"
+#line 677 "runpicture.in"
addFunc(ve, run::gen_runpicture51, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray2(), SYM(p), false, false), formal(realArray(), SYM(uknot), false, false), formal(realArray(), SYM(vknot), false, false), formal(realArray2(), SYM(weights), true, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(penArray(), SYM(colors), false, false));
-#line 683 "runpicture.in"
+#line 686 "runpicture.in"
addFunc(ve, run::gen_runpicture52, primVoid(), SYM(drawSphere), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(t), false, false), formal(primBoolean(), SYM(half), true, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primInt(), SYM(type), false, false));
-#line 692 "runpicture.in"
+#line 695 "runpicture.in"
addFunc(ve, run::gen_runpicture53, primVoid(), SYM(drawCylinder), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(t), false, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primBoolean(), SYM(core), true, false));
-#line 700 "runpicture.in"
+#line 703 "runpicture.in"
addFunc(ve, run::gen_runpicture54, primVoid(), SYM(drawDisk), formal(primPicture(), SYM(f), false, false), formal(realArray2(), SYM(t), false, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false));
-#line 707 "runpicture.in"
+#line 710 "runpicture.in"
addFunc(ve, run::gen_runpicture55, primVoid(), SYM(drawTube), formal(primPicture(), SYM(f), false, false), formal(tripleArray(), SYM(g), false, false), formal(primReal(), SYM(width), false, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(primTriple(), SYM(min), false, false), formal(primTriple(), SYM(max), false, false), formal(primBoolean(), SYM(core), true, false));
-#line 716 "runpicture.in"
+#line 719 "runpicture.in"
addFunc(ve, run::gen_runpicture56, primVoid(), SYM(drawpixel), formal(primPicture(), SYM(f), false, false), formal(primTriple(), SYM(v), false, false), formal(primPen(), SYM(p), false, false), formal(primReal(), SYM(width), true, false));
-#line 722 "runpicture.in"
+#line 725 "runpicture.in"
addFunc(ve, run::gen_runpicture57, primVoid(), SYM(draw), formal(primPicture(), SYM(f), false, false), formal(tripleArray(), SYM(v), false, false), formal(IntArray2(), SYM(vi), false, false), formal(primTriple(), SYM(center), true, false), formal(tripleArray(), SYM(n), false, false), formal(IntArray2(), SYM(ni), false, false), formal(penArray(), SYM(p), false, false), formal(primReal(), SYM(opacity), false, false), formal(primReal(), SYM(shininess), false, false), formal(primReal(), SYM(metallic), false, false), formal(primReal(), SYM(fresnel0), false, false), formal(penArray(), SYM(c), true, false), formal(IntArray2(), SYM(ci), true, false), formal(primInt(), SYM(interaction), false, false));
-#line 734 "runpicture.in"
+#line 737 "runpicture.in"
addFunc(ve, run::gen_runpicture58, primTriple(), SYM(min3), formal(primPicture(), SYM(f), false, false));
-#line 739 "runpicture.in"
+#line 742 "runpicture.in"
addFunc(ve, run::gen_runpicture59, primTriple(), SYM(max3), formal(primPicture(), SYM(f), false, false));
-#line 744 "runpicture.in"
+#line 747 "runpicture.in"
addFunc(ve, run::gen_runpicture60, primTriple(), SYM(size3), formal(primPicture(), SYM(f), false, false));
-#line 750 "runpicture.in"
+#line 753 "runpicture.in"
addFunc(ve, run::gen_runpicture61, primPair(), SYM(minratio), formal(primPicture(), SYM(f), false, false));
-#line 755 "runpicture.in"
+#line 758 "runpicture.in"
addFunc(ve, run::gen_runpicture62, primPair(), SYM(maxratio), formal(primPicture(), SYM(f), false, false));
-#line 760 "runpicture.in"
+#line 763 "runpicture.in"
addFunc(ve, run::gen_runpicture63, primBoolean(), SYM(is3D), formal(primPicture(), SYM(f), false, false));
}
diff --git a/graphics/asymptote/runpicture.in b/graphics/asymptote/runpicture.in
index 56431b9be7..421a97db8e 100644
--- a/graphics/asymptote/runpicture.in
+++ b/graphics/asymptote/runpicture.in
@@ -470,26 +470,29 @@ void _shipout(string prefix=emptystring, picture *f, picture *preamble=NULL,
void shipout3(string prefix, picture *f, string format=emptystring,
real width, real height, real angle, real zoom,
triple m, triple M, pair shift, pair margin, realarray2 *t,
+ realarray2 *tup,
realarray *background, triplearray *lights, realarray2 *diffuse,
realarray2 *specular, bool view=true)
{
size_t n=checkArrays(lights,diffuse);
checkEqual(n,checkArray(specular));
- real *T,*Background,*Diffuse,*Specular;
+ real *T,*Tup,*Background,*Diffuse,*Specular;
triple *Lights;
copyArray2C(T,t,true,4);
+ copyArray2C(Tup,tup,true,4);
copyArrayC(Background,background);
copyArrayC(Lights,lights);
copyArray2C(Diffuse,diffuse,false,4,UseGC);
copyArray2C(Specular,specular,false,4,UseGC);
- f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,margin,T,
+ f->shipout3(prefix,format,width,height,angle,zoom,m,M,shift,margin,T,Tup,
Background,n,Lights,Diffuse,Specular,view);
delete[] Background;
delete[] T;
+ delete[] Tup;
}
void shipout3(string prefix, picture *f, string format=defaultformat3)
diff --git a/graphics/asymptote/runsystem.cc b/graphics/asymptote/runsystem.cc
index e9c8c37eec..4b97ab6bc3 100644
--- a/graphics/asymptote/runsystem.cc
+++ b/graphics/asymptote/runsystem.cc
@@ -304,51 +304,55 @@ void gen_runsystem14(stack *Stack)
if(settings::warn(s)) {
em.warning(position ? getPos() : nullPos,s);
em << t;
+ em.sync(true);
}
}
// Strip directory from string
-#line 191 "runsystem.in"
+#line 192 "runsystem.in"
// string stripdirectory(string *s);
void gen_runsystem15(stack *Stack)
{
string * s=vm::pop<string *>(Stack);
-#line 192 "runsystem.in"
+#line 193 "runsystem.in"
{Stack->push<string>(stripDir(*s)); return;}
}
// Strip directory from string
-#line 197 "runsystem.in"
+#line 198 "runsystem.in"
// string stripfile(string *s);
void gen_runsystem16(stack *Stack)
{
string * s=vm::pop<string *>(Stack);
-#line 198 "runsystem.in"
+#line 199 "runsystem.in"
{Stack->push<string>(stripFile(*s)); return;}
}
// Strip file extension from string
-#line 203 "runsystem.in"
+#line 204 "runsystem.in"
// string stripextension(string *s);
void gen_runsystem17(stack *Stack)
{
string * s=vm::pop<string *>(Stack);
-#line 204 "runsystem.in"
+#line 205 "runsystem.in"
{Stack->push<string>(stripExt(*s)); return;}
}
// Call ImageMagick convert.
-#line 209 "runsystem.in"
+#line 210 "runsystem.in"
// Int convert(string args=emptystring, string file=emptystring, string format=emptystring);
void gen_runsystem18(stack *Stack)
{
string format=vm::pop<string>(Stack,emptystring);
string file=vm::pop<string>(Stack,emptystring);
string args=vm::pop<string>(Stack,emptystring);
-#line 211 "runsystem.in"
+#line 212 "runsystem.in"
string name=convertname(file,format);
mem::vector<string> cmd;
- cmd.push_back(getSetting<string>("convert"));
+ string s=getSetting<string>("convert");
+ cmd.push_back(s);
+ if(s == "magick")
+ cmd.push_back("convert");
push_split(cmd,args);
cmd.push_back(name);
bool quiet=verbose <= 1;
@@ -371,33 +375,34 @@ void gen_runsystem18(stack *Stack)
}
// Call ImageMagick animate.
-#line 237 "runsystem.in"
+#line 241 "runsystem.in"
// Int animate(string args=emptystring, string file=emptystring, string format=emptystring);
void gen_runsystem19(stack *Stack)
{
string format=vm::pop<string>(Stack,emptystring);
string file=vm::pop<string>(Stack,emptystring);
string args=vm::pop<string>(Stack,emptystring);
-#line 239 "runsystem.in"
-#ifndef __MSDOS__
+#line 243 "runsystem.in"
string name=convertname(file,format);
if(view()) {
mem::vector<string> cmd;
- cmd.push_back(getSetting<string>("animate"));
+ string s=getSetting<string>("animate");
+ cmd.push_back(s);
+ if(s == "magick")
+ cmd.push_back("animate");
push_split(cmd,args);
cmd.push_back(name);
{Stack->push<Int>(System(cmd,0,false,"animate","your animated GIF viewer")); return;}
}
-#endif
{Stack->push<Int>(0); return;}
}
-#line 253 "runsystem.in"
+#line 258 "runsystem.in"
// void purge(Int divisor=0);
void gen_runsystem20(stack *Stack)
{
Int divisor=vm::pop<Int>(Stack,0);
-#line 254 "runsystem.in"
+#line 259 "runsystem.in"
purge(divisor);
}
@@ -437,17 +442,17 @@ void gen_runsystem_venv(venv &ve)
addFunc(ve, run::gen_runsystem13, primVoid(), SYM(nowarn), formal(primString(), SYM(s), false, false));
#line 182 "runsystem.in"
addFunc(ve, run::gen_runsystem14, primVoid(), SYM(warning), formal(primString(), SYM(s), false, false), formal(primString(), SYM(t), false, false), formal(primBoolean(), SYM(position), true, false));
-#line 190 "runsystem.in"
+#line 191 "runsystem.in"
addFunc(ve, run::gen_runsystem15, primString(), SYM(stripdirectory), formal(primString(), SYM(s), false, false));
-#line 196 "runsystem.in"
+#line 197 "runsystem.in"
addFunc(ve, run::gen_runsystem16, primString(), SYM(stripfile), formal(primString(), SYM(s), false, false));
-#line 202 "runsystem.in"
+#line 203 "runsystem.in"
addFunc(ve, run::gen_runsystem17, primString(), SYM(stripextension), formal(primString(), SYM(s), false, false));
-#line 208 "runsystem.in"
+#line 209 "runsystem.in"
addFunc(ve, run::gen_runsystem18, primInt(), SYM(convert), formal(primString(), SYM(args), true, false), formal(primString(), SYM(file), true, false), formal(primString(), SYM(format), true, false));
-#line 236 "runsystem.in"
+#line 240 "runsystem.in"
addFunc(ve, run::gen_runsystem19, primInt(), SYM(animate), formal(primString(), SYM(args), true, false), formal(primString(), SYM(file), true, false), formal(primString(), SYM(format), true, false));
-#line 253 "runsystem.in"
+#line 258 "runsystem.in"
addFunc(ve, run::gen_runsystem20, primVoid(), SYM(purge), formal(primInt(), SYM(divisor), true, false));
}
diff --git a/graphics/asymptote/runsystem.in b/graphics/asymptote/runsystem.in
index 306b332ea1..cc06d316f8 100644
--- a/graphics/asymptote/runsystem.in
+++ b/graphics/asymptote/runsystem.in
@@ -184,6 +184,7 @@ void warning(string s, string t, bool position=false)
if(settings::warn(s)) {
em.warning(position ? getPos() : nullPos,s);
em << t;
+ em.sync(true);
}
}
@@ -211,7 +212,10 @@ Int convert(string args=emptystring, string file=emptystring,
{
string name=convertname(file,format);
mem::vector<string> cmd;
- cmd.push_back(getSetting<string>("convert"));
+ string s=getSetting<string>("convert");
+ cmd.push_back(s);
+ if(s == "magick")
+ cmd.push_back("convert");
push_split(cmd,args);
cmd.push_back(name);
bool quiet=verbose <= 1;
@@ -237,16 +241,17 @@ Int convert(string args=emptystring, string file=emptystring,
Int animate(string args=emptystring, string file=emptystring,
string format=emptystring)
{
-#ifndef __MSDOS__
string name=convertname(file,format);
if(view()) {
mem::vector<string> cmd;
- cmd.push_back(getSetting<string>("animate"));
+ string s=getSetting<string>("animate");
+ cmd.push_back(s);
+ if(s == "magick")
+ cmd.push_back("animate");
push_split(cmd,args);
cmd.push_back(name);
return System(cmd,0,false,"animate","your animated GIF viewer");
}
-#endif
return 0;
}
diff --git a/graphics/asymptote/settings.cc b/graphics/asymptote/settings.cc
index 9a5006cfe4..f7fa46afe0 100644
--- a/graphics/asymptote/settings.cc
+++ b/graphics/asymptote/settings.cc
@@ -108,7 +108,7 @@ string defaultHTMLViewer="google-chrome";
string defaultGhostscript="gs";
string defaultGhostscriptLibrary="";
string defaultDisplay="display";
-string defaultAnimate="animate";
+string defaultAnimate="magick";
void queryRegistry() {}
const string dirsep="/";
@@ -125,7 +125,7 @@ string defaultHTMLViewer="cmd";
string defaultGhostscript;
string defaultGhostscriptLibrary;
string defaultDisplay="cmd";
-//string defaultAnimate="animate";
+//string defaultAnimate="magick";
string defaultAnimate="cmd";
const string dirsep="\\";
@@ -1321,7 +1321,7 @@ void initSettings() {
"Center, Bottom, Top, or Zero page alignment",
"C"));
- addOption(new boolSetting("debug", 'd', "Enable debugging messages"));
+ addOption(new boolSetting("debug", 'd', "Enable debugging messages and traceback"));
addOption(new incrementSetting("verbose", 'v',
"Increase verbosity level (can specify multiple times)", &verbose));
// Resolve ambiguity with --version
diff --git a/graphics/asymptote/shaders.cc b/graphics/asymptote/shaders.cc
index e1e08a45de..117bbb25de 100644
--- a/graphics/asymptote/shaders.cc
+++ b/graphics/asymptote/shaders.cc
@@ -19,7 +19,7 @@ int GLSLversion;
GLuint compileAndLinkShader(std::vector<ShaderfileModePair> const& shaders,
std::vector<std::string> const& defineflags,
- bool ssbo, bool interlock, bool compute)
+ bool ssbo, bool interlock, bool compute, bool test)
{
GLuint shader = glCreateProgram();
std::vector<GLuint> compiledShaders;
@@ -27,8 +27,8 @@ GLuint compileAndLinkShader(std::vector<ShaderfileModePair> const& shaders,
size_t n=shaders.size();
for(size_t i=0; i < n; ++i) {
GLint newshader=createShaderFile(shaders[i].first,shaders[i].second,
- defineflags,ssbo,interlock,compute);
- if((ssbo || interlock || compute) && newshader == 0) return 0;
+ defineflags,ssbo,interlock,compute,test);
+ if(test && newshader == 0) return 0;
glAttachShader(shader,newshader);
compiledShaders.push_back(newshader);
}
@@ -53,7 +53,7 @@ GLuint compileAndLinkShader(std::vector<ShaderfileModePair> const& shaders,
GLuint createShader(const std::string& src, int shaderType,
const std::string& filename, bool ssbo, bool interlock,
- bool compute)
+ bool compute, bool test)
{
const GLchar *source=src.c_str();
GLuint shader=glCreateShader(shaderType);
@@ -64,7 +64,7 @@ GLuint createShader(const std::string& src, int shaderType,
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
if(status != GL_TRUE) {
- if(ssbo || interlock || compute) return 0;
+ if(test) return 0;
GLint length;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
@@ -90,7 +90,7 @@ GLuint createShader(const std::string& src, int shaderType,
GLuint createShaderFile(std::string file, int shaderType,
std::vector<std::string> const& defineflags,
- bool ssbo, bool interlock, bool compute)
+ bool ssbo, bool interlock, bool compute, bool test)
{
std::ifstream shaderFile;
shaderFile.open(file.c_str());
@@ -124,6 +124,7 @@ GLuint createShaderFile(std::string file, int shaderType,
exit(-1);
}
- return createShader(shaderSrc.str(),shaderType,file,ssbo,interlock,compute);
+ return createShader(shaderSrc.str(),shaderType,file,ssbo,interlock,compute,
+ test);
}
#endif
diff --git a/graphics/asymptote/shaders.h b/graphics/asymptote/shaders.h
index 1ff831d997..734044e2d0 100644
--- a/graphics/asymptote/shaders.h
+++ b/graphics/asymptote/shaders.h
@@ -25,11 +25,11 @@ typedef std::pair<std::string, int> ShaderfileModePair;
GLuint compileAndLinkShader(
std::vector<ShaderfileModePair> const& shaders,
std::vector<std::string> const& defineflags, bool ssbo=true,
- bool interlock=false, bool compute=false);
+ bool interlock=false, bool compute=false, bool test=false);
GLuint createShaderFile(std::string file, int shaderType,
std::vector<std::string> const& constflags,
- bool ssbo, bool interlock, bool compute);
+ bool ssbo, bool interlock, bool compute, bool test);
enum attrib {positionAttrib=0,normalAttrib,materialAttrib,colorAttrib,
widthAttrib};
diff --git a/graphics/asymptote/stack.cc b/graphics/asymptote/stack.cc
index 3623e666cb..47b98de430 100644
--- a/graphics/asymptote/stack.cc
+++ b/graphics/asymptote/stack.cc
@@ -342,6 +342,8 @@ void stack::runWithOrWithoutClosure(lambda *l, vars_t vars, vars_t parent)
string& fileName=P.fileName;
unsigned int offset=P.xmapCount;
+ bool traceless=!settings::getSetting<bool>("debug");
+
try {
for (;;) {
const inst &i = *ip;
@@ -521,7 +523,14 @@ void stack::runWithOrWithoutClosure(lambda *l, vars_t vars, vars_t parent)
case inst::popcall: {
/* get the function reference off of the stack */
callable* f = pop<callable*>();
- f->call(this);
+ if(traceless)
+ f->call(this);
+ else {
+ em.traceback.push_back(curPos);
+ f->call(this);
+ if(em.traceback.size())
+ em.traceback.pop_back();
+ }
break;
}
@@ -649,7 +658,7 @@ void errornothrow(const char* message)
{
em.error(curPos);
em << message;
- em.sync();
+ em.sync(true);
}
void error(const char* message)
diff --git a/graphics/asymptote/stm.cc b/graphics/asymptote/stm.cc
index 17461a01d2..e9907d8d0e 100644
--- a/graphics/asymptote/stm.cc
+++ b/graphics/asymptote/stm.cc
@@ -134,7 +134,7 @@ void tryToWriteExp(coenv &e, exp *expr)
if (t->kind == ty_overloaded) {
// Translate the expr in order to print the ambiguity error first.
expr->trans(e);
- em.sync();
+ em.sync(true);
assert(em.errors());
// Then, write out all of the types.
diff --git a/graphics/asymptote/v3dheadertypes.h b/graphics/asymptote/v3dheadertypes.h
index 3e29f8469f..cef91af731 100644
--- a/graphics/asymptote/v3dheadertypes.h
+++ b/graphics/asymptote/v3dheadertypes.h
@@ -1,6 +1,6 @@
// Enum class for v3dheadertypes
// AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2024-06-21 17:44:46+00:00
+// Generated at 2024-08-15 05:44:20+00:00
namespace camp
{
diff --git a/graphics/asymptote/v3dheadertypes.py b/graphics/asymptote/v3dheadertypes.py
index 988128ff44..940856200f 100644
--- a/graphics/asymptote/v3dheadertypes.py
+++ b/graphics/asymptote/v3dheadertypes.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# Enum class for v3dheadertypes
""" AUTO-GENERATED from v3dheadertypes.csv """
-# Generated at 2024-06-21 17:45:18+00:00
+# Generated at 2024-08-15 05:44:42+00:00
class v3dheadertypes:
v3dheadertypes_canvasWidth=1
diff --git a/graphics/asymptote/v3dtypes.h b/graphics/asymptote/v3dtypes.h
index 9713798875..63e1e793b1 100644
--- a/graphics/asymptote/v3dtypes.h
+++ b/graphics/asymptote/v3dtypes.h
@@ -1,6 +1,6 @@
// Enum class for v3dtypes
// AUTO-GENERATED from v3dtypes.csv
-// Generated at 2024-06-21 17:44:46+00:00
+// Generated at 2024-08-15 05:44:20+00:00
namespace camp
{
diff --git a/graphics/asymptote/v3dtypes.py b/graphics/asymptote/v3dtypes.py
index 9dab614b51..ca822e9fbb 100644
--- a/graphics/asymptote/v3dtypes.py
+++ b/graphics/asymptote/v3dtypes.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# Enum class for v3dtypes
""" AUTO-GENERATED from v3dtypes.csv """
-# Generated at 2024-06-21 17:45:18+00:00
+# Generated at 2024-08-15 05:44:42+00:00
class v3dtypes:
v3dtypes_material=1
diff --git a/graphics/asymptote/webgl/gl.js b/graphics/asymptote/webgl/gl.js
index 00375ee57f..024a886fc6 100644
--- a/graphics/asymptote/webgl/gl.js
+++ b/graphics/asymptote/webgl/gl.js
@@ -522,7 +522,7 @@ class vertexBuffer {
}
// indexed colored vertex
- iVertex(i,v,n,c=[0,0,0,0]) {
+ iVertex(i,v,n,onscreen,c=[0,0,0,0]) {
let i6=6*i;
this.vertices[i6]=v[0];
this.vertices[i6+1]=v[1];
@@ -536,7 +536,8 @@ class vertexBuffer {
this.colors[i4+1]=c[1];
this.colors[i4+2]=c[2];
this.colors[i4+3]=c[3];
- this.indices.push(i);
+ if(onscreen)
+ this.indices.push(i);
}
append(data) {
@@ -718,7 +719,7 @@ class BezierPatch extends Geometry {
if(color) {
let sum=color[0][3]+color[1][3]+color[2][3];
this.transparent=(n == 16 || n == 4) ?
- sum+color[3][3] < 1020 : sum < 765;
+ sum+color[3][3] < 4 : sum < 3;
} else
this.transparent=Materials[MaterialIndex].diffuse[3] < 1;
@@ -1811,7 +1812,7 @@ class BezierPatch extends Geometry {
// Check the horizontal flatness.
let h=Flatness(p0,p12,p3,p15);
// Check straightness of the horizontal edges and interior control curves.
- h=Math.max(Straightness(p0,p[4],p[8],p12));
+ h=Math.max(h,Straightness(p0,p[4],p[8],p12));
h=Math.max(h,Straightness(p[1],p[5],p[9],p[13]));
h=Math.max(h,Straightness(p3,p[7],p[11],p15));
h=Math.max(h,Straightness(p[2],p[6],p[10],p[14]));
@@ -2158,14 +2159,15 @@ class Triangles extends Geometry {
super();
this.CenterIndex=CenterIndex;
this.MaterialIndex=MaterialIndex;
- this.Min=this.Bounds(Positions,Math.min);
- this.Max=this.Bounds(Positions,Math.max);
- this.controlpoints=Positions;
- this.Normals=Normals;
- this.Colors=Colors;
- this.Indices=Indices;
+ this.controlpoints=window.Positions;
+ this.Normals=window.Normals;
+ this.Colors=window.Colors;
+ this.Indices=window.Indices;
this.transparent=Materials[this.MaterialIndex].diffuse[3] < 1;
+
+ this.Min=this.Bounds(this.controlpoints,Math.min);
+ this.Max=this.Bounds(this.controlpoints,Math.max);
}
Bounds(p,m) {
@@ -2188,6 +2190,7 @@ class Triangles extends Geometry {
}
process(p) {
+
this.data.vertices=new Array(6*p.length);
// Override materialIndex to encode color vs material
materialIndex=this.Colors.length > 0 ?
@@ -2199,41 +2202,40 @@ class Triangles extends Geometry {
let P0=p[PI[0]];
let P1=p[PI[1]];
let P2=p[PI[2]];
- if(!this.offscreen([P0,P1,P2])) {
- let NI=index.length > 1 ? index[1] : PI;
- if(!NI || NI.length == 0) NI=PI;
- if(this.Colors.length > 0) {
- let CI=index.length > 2 ? index[2] : PI;
- if(!CI || CI.length == 0) CI=PI;
- let C0=this.Colors[CI[0]];
- let C1=this.Colors[CI[1]];
- let C2=this.Colors[CI[2]];
- this.transparent |= C0[3]+C1[3]+C2[3] < 765;
- if(wireframe == 0) {
- this.data.iVertex(PI[0],P0,this.Normals[NI[0]],C0);
- this.data.iVertex(PI[1],P1,this.Normals[NI[1]],C1);
- this.data.iVertex(PI[2],P2,this.Normals[NI[2]],C2);
- } else {
- this.data.iVertex(PI[0],P0,this.Normals[NI[0]],C0);
- this.data.iVertex(PI[1],P1,this.Normals[NI[1]],C1);
- this.data.iVertex(PI[1],P1,this.Normals[NI[1]],C1);
- this.data.iVertex(PI[2],P2,this.Normals[NI[2]],C2);
- this.data.iVertex(PI[2],P2,this.Normals[NI[2]],C2);
- this.data.iVertex(PI[0],P0,this.Normals[NI[0]],C0);
- }
+ let onscreen=!this.offscreen([P0,P1,P2]);
+ let NI=index.length > 1 ? index[1] : PI;
+ if(!NI || NI.length == 0) NI=PI;
+ if(this.Colors.length > 0) {
+ let CI=index.length > 2 ? index[2] : PI;
+ if(!CI || CI.length == 0) CI=PI;
+ let C0=this.Colors[CI[0]];
+ let C1=this.Colors[CI[1]];
+ let C2=this.Colors[CI[2]];
+ this.transparent |= C0[3]+C1[3]+C2[3] < 3;
+ if(wireframe == 0) {
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],onscreen,C0);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],onscreen,C1);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],onscreen,C2);
} else {
- if(wireframe == 0) {
- this.data.iVertex(PI[0],P0,this.Normals[NI[0]]);
- this.data.iVertex(PI[1],P1,this.Normals[NI[1]]);
- this.data.iVertex(PI[2],P2,this.Normals[NI[2]]);
- } else {
- this.data.iVertex(PI[0],P0,this.Normals[NI[0]]);
- this.data.iVertex(PI[1],P1,this.Normals[NI[1]]);
- this.data.iVertex(PI[1],P1,this.Normals[NI[1]]);
- this.data.iVertex(PI[2],P2,this.Normals[NI[2]]);
- this.data.iVertex(PI[2],P2,this.Normals[NI[2]]);
- this.data.iVertex(PI[0],P0,this.Normals[NI[0]]);
- }
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],onscreen,C0);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],onscreen,C1);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],onscreen,C1);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],onscreen,C2);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],onscreen,C2);
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],onscreen,C0);
+ }
+ } else {
+ if(wireframe == 0) {
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],onscreen);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],onscreen);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],onscreen);
+ } else {
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],onscreen);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],onscreen);
+ this.data.iVertex(PI[1],P1,this.Normals[NI[1]],onscreen);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],onscreen);
+ this.data.iVertex(PI[2],P2,this.Normals[NI[2]],onscreen);
+ this.data.iVertex(PI[0],P0,this.Normals[NI[0]],onscreen);
}
}
}
@@ -3224,10 +3226,10 @@ function resize()
window.parent.asyProjection=false;
if(W.absolute && !W.embedded) {
- W.canvasWidth=W.canvasWith0*window.devicePixelRatio;
+ W.canvasWidth=W.canvasWidth0*window.devicePixelRatio;
W.canvasHeight=W.canvasHeight0*window.devicePixelRatio;
} else {
- let Aspect=W.canvasWith0/W.canvasHeight0;
+ let Aspect=W.canvasWidth0/W.canvasHeight0;
W.canvasWidth=Math.max(window.innerWidth-windowTrim,windowTrim);
W.canvasHeight=Math.max(window.innerHeight-windowTrim,windowTrim);
@@ -3788,7 +3790,7 @@ function webGLStart()
W.canvas.addEventListener("touchmove",handleTouchMove,false);
document.addEventListener("keydown",handleKey,false);
- W.canvasWith0=W.canvasWidth;
+ W.canvasWidth0=W.canvasWidth;
W.canvasHeight0=W.canvasHeight;
mat4.identity(rotMat);
@@ -3800,6 +3802,8 @@ function webGLStart()
if(W.ibl)
initIBL().then(SetIBL).then(redrawScene);
+
+ home();
}
window.webGLStart=webGLStart;
diff --git a/graphics/asymptote/webgl/license b/graphics/asymptote/webgl/license
index 1dae2c49bd..915200ff7c 100644
--- a/graphics/asymptote/webgl/license
+++ b/graphics/asymptote/webgl/license
@@ -1,6 +1,6 @@
/*@license
AsyGL: Render Bezier patches and triangles via subdivision with WebGL.
- Copyright 2019-2022: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
+ Copyright 2019-2024: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
University of Alberta
This program is free software; you can redistribute it and/or modify