@tampadevs/react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Avatar.d.ts +16 -0
- package/dist/components/Avatar.d.ts.map +1 -0
- package/dist/components/AvatarGroup.d.ts +14 -0
- package/dist/components/AvatarGroup.d.ts.map +1 -0
- package/dist/components/Button.d.ts +13 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.test.d.ts +2 -0
- package/dist/components/Button.test.d.ts.map +1 -0
- package/dist/components/Calendar.d.ts +27 -0
- package/dist/components/Calendar.d.ts.map +1 -0
- package/dist/components/Carousel.d.ts +11 -0
- package/dist/components/Carousel.d.ts.map +1 -0
- package/dist/components/CtaSection.d.ts +13 -0
- package/dist/components/CtaSection.d.ts.map +1 -0
- package/dist/components/EventCard.d.ts +19 -0
- package/dist/components/EventCard.d.ts.map +1 -0
- package/dist/components/Footer.d.ts +25 -0
- package/dist/components/Footer.d.ts.map +1 -0
- package/dist/components/Header.d.ts +17 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Icon.d.ts +8 -0
- package/dist/components/Icon.d.ts.map +1 -0
- package/dist/components/Image.d.ts +17 -0
- package/dist/components/Image.d.ts.map +1 -0
- package/dist/components/ImageCarousel.d.ts +18 -0
- package/dist/components/ImageCarousel.d.ts.map +1 -0
- package/dist/components/ImageText.d.ts +16 -0
- package/dist/components/ImageText.d.ts.map +1 -0
- package/dist/components/Logo.d.ts +15 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Logo3d.d.ts +28 -0
- package/dist/components/Logo3d.d.ts.map +1 -0
- package/dist/components/LogoMarquee.d.ts +18 -0
- package/dist/components/LogoMarquee.d.ts.map +1 -0
- package/dist/components/NewsletterSignup.d.ts +11 -0
- package/dist/components/NewsletterSignup.d.ts.map +1 -0
- package/dist/components/OpenCollective.d.ts +16 -0
- package/dist/components/OpenCollective.d.ts.map +1 -0
- package/dist/components/PersonCard.d.ts +20 -0
- package/dist/components/PersonCard.d.ts.map +1 -0
- package/dist/components/PersonTable.d.ts +28 -0
- package/dist/components/PersonTable.d.ts.map +1 -0
- package/dist/components/PromoSection.d.ts +20 -0
- package/dist/components/PromoSection.d.ts.map +1 -0
- package/dist/components/SponsorCard.d.ts +10 -0
- package/dist/components/SponsorCard.d.ts.map +1 -0
- package/dist/components/SponsorGrid.d.ts +21 -0
- package/dist/components/SponsorGrid.d.ts.map +1 -0
- package/dist/components/Table.d.ts +30 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/VideoEmbed.d.ts +14 -0
- package/dist/components/VideoEmbed.d.ts.map +1 -0
- package/dist/components/VideoHero.d.ts +16 -0
- package/dist/components/VideoHero.d.ts.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/index10.js +185 -0
- package/dist/index10.js.map +1 -0
- package/dist/index11.js +268 -0
- package/dist/index11.js.map +1 -0
- package/dist/index12.js +133 -0
- package/dist/index12.js.map +1 -0
- package/dist/index13.js +112 -0
- package/dist/index13.js.map +1 -0
- package/dist/index14.js +286 -0
- package/dist/index14.js.map +1 -0
- package/dist/index15.js +325 -0
- package/dist/index15.js.map +1 -0
- package/dist/index16.js +204 -0
- package/dist/index16.js.map +1 -0
- package/dist/index17.js +269 -0
- package/dist/index17.js.map +1 -0
- package/dist/index18.js +147 -0
- package/dist/index18.js.map +1 -0
- package/dist/index19.js +697 -0
- package/dist/index19.js.map +1 -0
- package/dist/index2.js +181 -0
- package/dist/index2.js.map +1 -0
- package/dist/index20.js +492 -0
- package/dist/index20.js.map +1 -0
- package/dist/index21.js +277 -0
- package/dist/index21.js.map +1 -0
- package/dist/index22.js +331 -0
- package/dist/index22.js.map +1 -0
- package/dist/index23.js +98 -0
- package/dist/index23.js.map +1 -0
- package/dist/index24.js +406 -0
- package/dist/index24.js.map +1 -0
- package/dist/index25.js +464 -0
- package/dist/index25.js.map +1 -0
- package/dist/index26.js +280 -0
- package/dist/index26.js.map +1 -0
- package/dist/index27.js +234 -0
- package/dist/index27.js.map +1 -0
- package/dist/index28.js +18 -0
- package/dist/index28.js.map +1 -0
- package/dist/index29.js +10779 -0
- package/dist/index29.js.map +1 -0
- package/dist/index3.js +39 -0
- package/dist/index3.js.map +1 -0
- package/dist/index30.js +358 -0
- package/dist/index30.js.map +1 -0
- package/dist/index31.js +199 -0
- package/dist/index31.js.map +1 -0
- package/dist/index32.js +22762 -0
- package/dist/index32.js.map +1 -0
- package/dist/index4.js +142 -0
- package/dist/index4.js.map +1 -0
- package/dist/index5.js +128 -0
- package/dist/index5.js.map +1 -0
- package/dist/index6.js +109 -0
- package/dist/index6.js.map +1 -0
- package/dist/index7.js +254 -0
- package/dist/index7.js.map +1 -0
- package/dist/index8.js +237 -0
- package/dist/index8.js.map +1 -0
- package/dist/index9.js +142 -0
- package/dist/index9.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/package.json +58 -0
package/dist/index3.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { clsx as v } from "./index28.js";
|
|
3
|
+
const i = {
|
|
4
|
+
xs: "0.75rem",
|
|
5
|
+
sm: "1rem",
|
|
6
|
+
md: "1.25rem",
|
|
7
|
+
lg: "1.5rem",
|
|
8
|
+
xl: "2rem"
|
|
9
|
+
}, z = {
|
|
10
|
+
github: "M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z",
|
|
11
|
+
twitter: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z",
|
|
12
|
+
linkedin: "M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z",
|
|
13
|
+
globe: "M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z",
|
|
14
|
+
mail: "M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z",
|
|
15
|
+
link: "M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z",
|
|
16
|
+
heart: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
|
|
17
|
+
"heart-filled": "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",
|
|
18
|
+
"chevron-left": "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",
|
|
19
|
+
"chevron-right": "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",
|
|
20
|
+
external: "M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"
|
|
21
|
+
};
|
|
22
|
+
function s({ name: e, size: t = "md", className: r }) {
|
|
23
|
+
const c = i[t], h = z[e];
|
|
24
|
+
return h ? /* @__PURE__ */ l(
|
|
25
|
+
"svg",
|
|
26
|
+
{
|
|
27
|
+
className: v("td-icon", r),
|
|
28
|
+
viewBox: "0 0 24 24",
|
|
29
|
+
fill: "currentColor",
|
|
30
|
+
style: { width: c, height: c },
|
|
31
|
+
"aria-hidden": "true",
|
|
32
|
+
children: /* @__PURE__ */ l("path", { d: h })
|
|
33
|
+
}
|
|
34
|
+
) : null;
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
s as Icon
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=index3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index3.js","sources":["../src/components/Icon.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IconProps {\n name: string;\n size?: IconSize;\n className?: string;\n}\n\nconst sizeMap: Record<IconSize, string> = {\n xs: '0.75rem',\n sm: '1rem',\n md: '1.25rem',\n lg: '1.5rem',\n xl: '2rem',\n};\n\n// SVG paths for common icons\nconst iconPaths: Record<string, string> = {\n github: 'M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z',\n twitter: 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z',\n linkedin: 'M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z',\n globe: 'M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z',\n mail: 'M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z',\n link: 'M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z',\n heart: 'M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z',\n 'heart-filled': 'M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z',\n 'chevron-left': 'M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z',\n 'chevron-right': 'M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z',\n external: 'M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z',\n};\n\nexport function Icon({ name, size = 'md', className }: IconProps) {\n const sizeValue = sizeMap[size];\n const path = iconPaths[name];\n\n if (!path) {\n return null;\n }\n\n return (\n <svg\n className={clsx('td-icon', className)}\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n style={{ width: sizeValue, height: sizeValue }}\n aria-hidden=\"true\"\n >\n <path d={path} />\n </svg>\n );\n}\n"],"names":["sizeMap","iconPaths","Icon","name","size","className","sizeValue","path","jsx","clsx"],"mappings":";;AAUA,MAAMA,IAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAGMC,IAAoC;AAAA,EACxC,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,UAAU;AAAA,EACV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,UAAU;AACZ;AAEO,SAASC,EAAK,EAAE,MAAAC,GAAM,MAAAC,IAAO,MAAM,WAAAC,KAAwB;AAChE,QAAMC,IAAYN,EAAQI,CAAI,GACxBG,IAAON,EAAUE,CAAI;AAE3B,SAAKI,IAKH,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAK,WAAWJ,CAAS;AAAA,MACpC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAO,EAAE,OAAOC,GAAW,QAAQA,EAAA;AAAA,MACnC,eAAY;AAAA,MAEZ,UAAA,gBAAAE,EAAC,QAAA,EAAK,GAAGD,EAAA,CAAM;AAAA,IAAA;AAAA,EAAA,IAXV;AAcX;"}
|
package/dist/index30.js
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import "./index29.js";
|
|
2
|
+
import { Loader as N, FileLoader as R, Color as H, SRGBColorSpace as T, Group as k, BufferGeometry as P, Float32BufferAttribute as w, LineBasicMaterial as C, Material as U, PointsMaterial as L, MeshPhongMaterial as J, LineSegments as D, Points as z, Mesh as S, Vector3 as V } from "./index32.js";
|
|
3
|
+
const q = /^[og]\s*(.+)?/, W = /^mtllib /, K = /^usemtl /, Q = /^usemap /, B = /\s+/, E = new V(), F = new V(), G = new V(), O = new V(), j = new V(), _ = new H();
|
|
4
|
+
function X() {
|
|
5
|
+
const I = {
|
|
6
|
+
objects: [],
|
|
7
|
+
object: {},
|
|
8
|
+
vertices: [],
|
|
9
|
+
normals: [],
|
|
10
|
+
colors: [],
|
|
11
|
+
uvs: [],
|
|
12
|
+
materials: {},
|
|
13
|
+
materialLibraries: [],
|
|
14
|
+
startObject: function(s, e) {
|
|
15
|
+
if (this.object && this.object.fromDeclaration === !1) {
|
|
16
|
+
this.object.name = s, this.object.fromDeclaration = e !== !1;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const n = this.object && typeof this.object.currentMaterial == "function" ? this.object.currentMaterial() : void 0;
|
|
20
|
+
if (this.object && typeof this.object._finalize == "function" && this.object._finalize(!0), this.object = {
|
|
21
|
+
name: s || "",
|
|
22
|
+
fromDeclaration: e !== !1,
|
|
23
|
+
geometry: {
|
|
24
|
+
vertices: [],
|
|
25
|
+
normals: [],
|
|
26
|
+
colors: [],
|
|
27
|
+
uvs: [],
|
|
28
|
+
hasUVIndices: !1
|
|
29
|
+
},
|
|
30
|
+
materials: [],
|
|
31
|
+
smooth: !0,
|
|
32
|
+
startMaterial: function(t, i) {
|
|
33
|
+
const a = this._finalize(!1);
|
|
34
|
+
a && (a.inherited || a.groupCount <= 0) && this.materials.splice(a.index, 1);
|
|
35
|
+
const d = {
|
|
36
|
+
index: this.materials.length,
|
|
37
|
+
name: t || "",
|
|
38
|
+
mtllib: Array.isArray(i) && i.length > 0 ? i[i.length - 1] : "",
|
|
39
|
+
smooth: a !== void 0 ? a.smooth : this.smooth,
|
|
40
|
+
groupStart: a !== void 0 ? a.groupEnd : 0,
|
|
41
|
+
groupEnd: -1,
|
|
42
|
+
groupCount: -1,
|
|
43
|
+
inherited: !1,
|
|
44
|
+
clone: function(g) {
|
|
45
|
+
const r = {
|
|
46
|
+
index: typeof g == "number" ? g : this.index,
|
|
47
|
+
name: this.name,
|
|
48
|
+
mtllib: this.mtllib,
|
|
49
|
+
smooth: this.smooth,
|
|
50
|
+
groupStart: 0,
|
|
51
|
+
groupEnd: -1,
|
|
52
|
+
groupCount: -1,
|
|
53
|
+
inherited: !1
|
|
54
|
+
};
|
|
55
|
+
return r.clone = this.clone.bind(r), r;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return this.materials.push(d), d;
|
|
59
|
+
},
|
|
60
|
+
currentMaterial: function() {
|
|
61
|
+
if (this.materials.length > 0)
|
|
62
|
+
return this.materials[this.materials.length - 1];
|
|
63
|
+
},
|
|
64
|
+
_finalize: function(t) {
|
|
65
|
+
const i = this.currentMaterial();
|
|
66
|
+
if (i && i.groupEnd === -1 && (i.groupEnd = this.geometry.vertices.length / 3, i.groupCount = i.groupEnd - i.groupStart, i.inherited = !1), t && this.materials.length > 1)
|
|
67
|
+
for (let a = this.materials.length - 1; a >= 0; a--)
|
|
68
|
+
this.materials[a].groupCount <= 0 && this.materials.splice(a, 1);
|
|
69
|
+
return t && this.materials.length === 0 && this.materials.push({
|
|
70
|
+
name: "",
|
|
71
|
+
smooth: this.smooth
|
|
72
|
+
}), i;
|
|
73
|
+
}
|
|
74
|
+
}, n && n.name && typeof n.clone == "function") {
|
|
75
|
+
const t = n.clone(0);
|
|
76
|
+
t.inherited = !0, this.object.materials.push(t);
|
|
77
|
+
}
|
|
78
|
+
this.objects.push(this.object);
|
|
79
|
+
},
|
|
80
|
+
finalize: function() {
|
|
81
|
+
this.object && typeof this.object._finalize == "function" && this.object._finalize(!0);
|
|
82
|
+
},
|
|
83
|
+
parseVertexIndex: function(s, e) {
|
|
84
|
+
const n = parseInt(s, 10);
|
|
85
|
+
return (n >= 0 ? n - 1 : n + e / 3) * 3;
|
|
86
|
+
},
|
|
87
|
+
parseNormalIndex: function(s, e) {
|
|
88
|
+
const n = parseInt(s, 10);
|
|
89
|
+
return (n >= 0 ? n - 1 : n + e / 3) * 3;
|
|
90
|
+
},
|
|
91
|
+
parseUVIndex: function(s, e) {
|
|
92
|
+
const n = parseInt(s, 10);
|
|
93
|
+
return (n >= 0 ? n - 1 : n + e / 2) * 2;
|
|
94
|
+
},
|
|
95
|
+
addVertex: function(s, e, n) {
|
|
96
|
+
const t = this.vertices, i = this.object.geometry.vertices;
|
|
97
|
+
i.push(t[s + 0], t[s + 1], t[s + 2]), i.push(t[e + 0], t[e + 1], t[e + 2]), i.push(t[n + 0], t[n + 1], t[n + 2]);
|
|
98
|
+
},
|
|
99
|
+
addVertexPoint: function(s) {
|
|
100
|
+
const e = this.vertices;
|
|
101
|
+
this.object.geometry.vertices.push(e[s + 0], e[s + 1], e[s + 2]);
|
|
102
|
+
},
|
|
103
|
+
addVertexLine: function(s) {
|
|
104
|
+
const e = this.vertices;
|
|
105
|
+
this.object.geometry.vertices.push(e[s + 0], e[s + 1], e[s + 2]);
|
|
106
|
+
},
|
|
107
|
+
addNormal: function(s, e, n) {
|
|
108
|
+
const t = this.normals, i = this.object.geometry.normals;
|
|
109
|
+
i.push(t[s + 0], t[s + 1], t[s + 2]), i.push(t[e + 0], t[e + 1], t[e + 2]), i.push(t[n + 0], t[n + 1], t[n + 2]);
|
|
110
|
+
},
|
|
111
|
+
addFaceNormal: function(s, e, n) {
|
|
112
|
+
const t = this.vertices, i = this.object.geometry.normals;
|
|
113
|
+
E.fromArray(t, s), F.fromArray(t, e), G.fromArray(t, n), j.subVectors(G, F), O.subVectors(E, F), j.cross(O), j.normalize(), i.push(j.x, j.y, j.z), i.push(j.x, j.y, j.z), i.push(j.x, j.y, j.z);
|
|
114
|
+
},
|
|
115
|
+
addColor: function(s, e, n) {
|
|
116
|
+
const t = this.colors, i = this.object.geometry.colors;
|
|
117
|
+
t[s] !== void 0 && i.push(t[s + 0], t[s + 1], t[s + 2]), t[e] !== void 0 && i.push(t[e + 0], t[e + 1], t[e + 2]), t[n] !== void 0 && i.push(t[n + 0], t[n + 1], t[n + 2]);
|
|
118
|
+
},
|
|
119
|
+
addUV: function(s, e, n) {
|
|
120
|
+
const t = this.uvs, i = this.object.geometry.uvs;
|
|
121
|
+
i.push(t[s + 0], t[s + 1]), i.push(t[e + 0], t[e + 1]), i.push(t[n + 0], t[n + 1]);
|
|
122
|
+
},
|
|
123
|
+
addDefaultUV: function() {
|
|
124
|
+
const s = this.object.geometry.uvs;
|
|
125
|
+
s.push(0, 0), s.push(0, 0), s.push(0, 0);
|
|
126
|
+
},
|
|
127
|
+
addUVLine: function(s) {
|
|
128
|
+
const e = this.uvs;
|
|
129
|
+
this.object.geometry.uvs.push(e[s + 0], e[s + 1]);
|
|
130
|
+
},
|
|
131
|
+
addFace: function(s, e, n, t, i, a, d, g, r) {
|
|
132
|
+
const h = this.vertices.length;
|
|
133
|
+
let o = this.parseVertexIndex(s, h), l = this.parseVertexIndex(e, h), u = this.parseVertexIndex(n, h);
|
|
134
|
+
if (this.addVertex(o, l, u), this.addColor(o, l, u), d !== void 0 && d !== "") {
|
|
135
|
+
const m = this.normals.length;
|
|
136
|
+
o = this.parseNormalIndex(d, m), l = this.parseNormalIndex(g, m), u = this.parseNormalIndex(r, m), this.addNormal(o, l, u);
|
|
137
|
+
} else
|
|
138
|
+
this.addFaceNormal(o, l, u);
|
|
139
|
+
if (t !== void 0 && t !== "") {
|
|
140
|
+
const m = this.uvs.length;
|
|
141
|
+
o = this.parseUVIndex(t, m), l = this.parseUVIndex(i, m), u = this.parseUVIndex(a, m), this.addUV(o, l, u), this.object.geometry.hasUVIndices = !0;
|
|
142
|
+
} else
|
|
143
|
+
this.addDefaultUV();
|
|
144
|
+
},
|
|
145
|
+
addPointGeometry: function(s) {
|
|
146
|
+
this.object.geometry.type = "Points";
|
|
147
|
+
const e = this.vertices.length;
|
|
148
|
+
for (let n = 0, t = s.length; n < t; n++) {
|
|
149
|
+
const i = this.parseVertexIndex(s[n], e);
|
|
150
|
+
this.addVertexPoint(i), this.addColor(i);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
addLineGeometry: function(s, e) {
|
|
154
|
+
this.object.geometry.type = "Line";
|
|
155
|
+
const n = this.vertices.length, t = this.uvs.length;
|
|
156
|
+
for (let i = 0, a = s.length; i < a; i++)
|
|
157
|
+
this.addVertexLine(this.parseVertexIndex(s[i], n));
|
|
158
|
+
for (let i = 0, a = e.length; i < a; i++)
|
|
159
|
+
this.addUVLine(this.parseUVIndex(e[i], t));
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
return I.startObject("", !1), I;
|
|
163
|
+
}
|
|
164
|
+
class $ extends N {
|
|
165
|
+
/**
|
|
166
|
+
* Constructs a new OBJ loader.
|
|
167
|
+
*
|
|
168
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
169
|
+
*/
|
|
170
|
+
constructor(s) {
|
|
171
|
+
super(s), this.materials = null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Starts loading from the given URL and passes the loaded OBJ asset
|
|
175
|
+
* to the `onLoad()` callback.
|
|
176
|
+
*
|
|
177
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
178
|
+
* @param {function(Group)} onLoad - Executed when the loading process has been finished.
|
|
179
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
180
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
181
|
+
*/
|
|
182
|
+
load(s, e, n, t) {
|
|
183
|
+
const i = this, a = new R(this.manager);
|
|
184
|
+
a.setPath(this.path), a.setRequestHeader(this.requestHeader), a.setWithCredentials(this.withCredentials), a.load(s, function(d) {
|
|
185
|
+
try {
|
|
186
|
+
e(i.parse(d));
|
|
187
|
+
} catch (g) {
|
|
188
|
+
t ? t(g) : console.error(g), i.manager.itemError(s);
|
|
189
|
+
}
|
|
190
|
+
}, n, t);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Sets the material creator for this OBJ. This object is loaded via {@link MTLLoader}.
|
|
194
|
+
*
|
|
195
|
+
* @param {MaterialCreator} materials - An object that creates the materials for this OBJ.
|
|
196
|
+
* @return {OBJLoader} A reference to this loader.
|
|
197
|
+
*/
|
|
198
|
+
setMaterials(s) {
|
|
199
|
+
return this.materials = s, this;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Parses the given OBJ data and returns the resulting group.
|
|
203
|
+
*
|
|
204
|
+
* @param {string} text - The raw OBJ data as a string.
|
|
205
|
+
* @return {Group} The parsed OBJ.
|
|
206
|
+
*/
|
|
207
|
+
parse(s) {
|
|
208
|
+
const e = new X();
|
|
209
|
+
s.indexOf(`\r
|
|
210
|
+
`) !== -1 && (s = s.replace(/\r\n/g, `
|
|
211
|
+
`)), s.indexOf(`\\
|
|
212
|
+
`) !== -1 && (s = s.replace(/\\\n/g, ""));
|
|
213
|
+
const n = s.split(`
|
|
214
|
+
`);
|
|
215
|
+
let t = [];
|
|
216
|
+
for (let d = 0, g = n.length; d < g; d++) {
|
|
217
|
+
const r = n[d].trimStart();
|
|
218
|
+
if (r.length === 0) continue;
|
|
219
|
+
const h = r.charAt(0);
|
|
220
|
+
if (h !== "#")
|
|
221
|
+
if (h === "v") {
|
|
222
|
+
const o = r.split(B);
|
|
223
|
+
switch (o[0]) {
|
|
224
|
+
case "v":
|
|
225
|
+
e.vertices.push(
|
|
226
|
+
parseFloat(o[1]),
|
|
227
|
+
parseFloat(o[2]),
|
|
228
|
+
parseFloat(o[3])
|
|
229
|
+
), o.length >= 7 ? (_.setRGB(
|
|
230
|
+
parseFloat(o[4]),
|
|
231
|
+
parseFloat(o[5]),
|
|
232
|
+
parseFloat(o[6]),
|
|
233
|
+
T
|
|
234
|
+
), e.colors.push(_.r, _.g, _.b)) : e.colors.push(void 0, void 0, void 0);
|
|
235
|
+
break;
|
|
236
|
+
case "vn":
|
|
237
|
+
e.normals.push(
|
|
238
|
+
parseFloat(o[1]),
|
|
239
|
+
parseFloat(o[2]),
|
|
240
|
+
parseFloat(o[3])
|
|
241
|
+
);
|
|
242
|
+
break;
|
|
243
|
+
case "vt":
|
|
244
|
+
e.uvs.push(
|
|
245
|
+
parseFloat(o[1]),
|
|
246
|
+
parseFloat(o[2])
|
|
247
|
+
);
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
} else if (h === "f") {
|
|
251
|
+
const l = r.slice(1).trim().split(B), u = [];
|
|
252
|
+
for (let c = 0, p = l.length; c < p; c++) {
|
|
253
|
+
const b = l[c];
|
|
254
|
+
if (b.length > 0) {
|
|
255
|
+
const v = b.split("/");
|
|
256
|
+
u.push(v);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
const m = u[0];
|
|
260
|
+
for (let c = 1, p = u.length - 1; c < p; c++) {
|
|
261
|
+
const b = u[c], v = u[c + 1];
|
|
262
|
+
e.addFace(
|
|
263
|
+
m[0],
|
|
264
|
+
b[0],
|
|
265
|
+
v[0],
|
|
266
|
+
m[1],
|
|
267
|
+
b[1],
|
|
268
|
+
v[1],
|
|
269
|
+
m[2],
|
|
270
|
+
b[2],
|
|
271
|
+
v[2]
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
} else if (h === "l") {
|
|
275
|
+
const o = r.substring(1).trim().split(" ");
|
|
276
|
+
let l = [];
|
|
277
|
+
const u = [];
|
|
278
|
+
if (r.indexOf("/") === -1)
|
|
279
|
+
l = o;
|
|
280
|
+
else
|
|
281
|
+
for (let m = 0, c = o.length; m < c; m++) {
|
|
282
|
+
const p = o[m].split("/");
|
|
283
|
+
p[0] !== "" && l.push(p[0]), p[1] !== "" && u.push(p[1]);
|
|
284
|
+
}
|
|
285
|
+
e.addLineGeometry(l, u);
|
|
286
|
+
} else if (h === "p") {
|
|
287
|
+
const l = r.slice(1).trim().split(" ");
|
|
288
|
+
e.addPointGeometry(l);
|
|
289
|
+
} else if ((t = q.exec(r)) !== null) {
|
|
290
|
+
const o = (" " + t[0].slice(1).trim()).slice(1);
|
|
291
|
+
e.startObject(o);
|
|
292
|
+
} else if (K.test(r))
|
|
293
|
+
e.object.startMaterial(r.substring(7).trim(), e.materialLibraries);
|
|
294
|
+
else if (W.test(r))
|
|
295
|
+
e.materialLibraries.push(r.substring(7).trim());
|
|
296
|
+
else if (Q.test(r))
|
|
297
|
+
console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.');
|
|
298
|
+
else if (h === "s") {
|
|
299
|
+
if (t = r.split(" "), t.length > 1) {
|
|
300
|
+
const l = t[1].trim().toLowerCase();
|
|
301
|
+
e.object.smooth = l !== "0" && l !== "off";
|
|
302
|
+
} else
|
|
303
|
+
e.object.smooth = !0;
|
|
304
|
+
const o = e.object.currentMaterial();
|
|
305
|
+
o && (o.smooth = e.object.smooth);
|
|
306
|
+
} else {
|
|
307
|
+
if (r === "\0") continue;
|
|
308
|
+
console.warn('THREE.OBJLoader: Unexpected line: "' + r + '"');
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
e.finalize();
|
|
312
|
+
const i = new k();
|
|
313
|
+
if (i.materialLibraries = [].concat(e.materialLibraries), !(e.objects.length === 1 && e.objects[0].geometry.vertices.length === 0) === !0)
|
|
314
|
+
for (let d = 0, g = e.objects.length; d < g; d++) {
|
|
315
|
+
const r = e.objects[d], h = r.geometry, o = r.materials, l = h.type === "Line", u = h.type === "Points";
|
|
316
|
+
let m = !1;
|
|
317
|
+
if (h.vertices.length === 0) continue;
|
|
318
|
+
const c = new P();
|
|
319
|
+
c.setAttribute("position", new w(h.vertices, 3)), h.normals.length > 0 && c.setAttribute("normal", new w(h.normals, 3)), h.colors.length > 0 && (m = !0, c.setAttribute("color", new w(h.colors, 3))), h.hasUVIndices === !0 && c.setAttribute("uv", new w(h.uvs, 2));
|
|
320
|
+
const p = [];
|
|
321
|
+
for (let v = 0, M = o.length; v < M; v++) {
|
|
322
|
+
const y = o[v], A = y.name + "_" + y.smooth + "_" + m;
|
|
323
|
+
let f = e.materials[A];
|
|
324
|
+
if (this.materials !== null) {
|
|
325
|
+
if (f = this.materials.create(y.name), l && f && !(f instanceof C)) {
|
|
326
|
+
const x = new C();
|
|
327
|
+
U.prototype.copy.call(x, f), x.color.copy(f.color), f = x;
|
|
328
|
+
} else if (u && f && !(f instanceof L)) {
|
|
329
|
+
const x = new L({ size: 10, sizeAttenuation: !1 });
|
|
330
|
+
U.prototype.copy.call(x, f), x.color.copy(f.color), x.map = f.map, f = x;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
f === void 0 && (l ? f = new C() : u ? f = new L({ size: 1, sizeAttenuation: !1 }) : f = new J(), f.name = y.name, f.flatShading = !y.smooth, f.vertexColors = m, e.materials[A] = f), p.push(f);
|
|
334
|
+
}
|
|
335
|
+
let b;
|
|
336
|
+
if (p.length > 1) {
|
|
337
|
+
for (let v = 0, M = o.length; v < M; v++) {
|
|
338
|
+
const y = o[v];
|
|
339
|
+
c.addGroup(y.groupStart, y.groupCount, v);
|
|
340
|
+
}
|
|
341
|
+
l ? b = new D(c, p) : u ? b = new z(c, p) : b = new S(c, p);
|
|
342
|
+
} else
|
|
343
|
+
l ? b = new D(c, p[0]) : u ? b = new z(c, p[0]) : b = new S(c, p[0]);
|
|
344
|
+
b.name = r.name, i.add(b);
|
|
345
|
+
}
|
|
346
|
+
else if (e.vertices.length > 0) {
|
|
347
|
+
const d = new L({ size: 1, sizeAttenuation: !1 }), g = new P();
|
|
348
|
+
g.setAttribute("position", new w(e.vertices, 3)), e.colors.length > 0 && e.colors[0] !== void 0 && (g.setAttribute("color", new w(e.colors, 3)), d.vertexColors = !0);
|
|
349
|
+
const r = new z(g, d);
|
|
350
|
+
i.add(r);
|
|
351
|
+
}
|
|
352
|
+
return i;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
export {
|
|
356
|
+
$ as OBJLoader
|
|
357
|
+
};
|
|
358
|
+
//# sourceMappingURL=index30.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index30.js","sources":["../../../node_modules/.pnpm/three@0.182.0/node_modules/three/examples/jsm/loaders/OBJLoader.js"],"sourcesContent":["import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3,\n\tColor,\n\tSRGBColorSpace\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\nconst _face_vertex_data_separator_pattern = /\\s+/;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nconst _color = new Color();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n\n/**\n * A loader for the OBJ format.\n *\n * The [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file) is a simple data-format that\n * represents 3D geometry in a human readable format as the position of each vertex, the UV position of\n * each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list\n * of vertices, and texture vertices.\n *\n * ```js\n * const loader = new OBJLoader();\n * const object = await loader.loadAsync( 'models/monster.obj' );\n * scene.add( object );\n * ```\n *\n * @augments Loader\n * @three_import import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';\n */\nclass OBJLoader extends Loader {\n\n\t/**\n\t * Constructs a new OBJ loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * A reference to a material creator.\n\t\t *\n\t\t * @type {?MaterialCreator}\n\t\t * @default null\n\t\t */\n\t\tthis.materials = null;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded OBJ asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Group)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Sets the material creator for this OBJ. This object is loaded via {@link MTLLoader}.\n\t *\n\t * @param {MaterialCreator} materials - An object that creates the materials for this OBJ.\n\t * @return {OBJLoader} A reference to this loader.\n\t */\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses the given OBJ data and returns the resulting group.\n\t *\n\t * @param {string} text - The raw OBJ data as a string.\n\t * @return {Group} The parsed OBJ.\n\t */\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet result = [];\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trimStart();\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tconst lineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue; // skip comments\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( _face_vertex_data_separator_pattern );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] ),\n\t\t\t\t\t\t\t\tSRGBColorSpace\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstate.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( _face_vertex_data_separator_pattern );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].slice( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n"],"names":["_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_face_vertex_data_separator_pattern","_vA","Vector3","_vB","_vC","_ab","_cb","_color","Color","ParserState","state","name","fromDeclaration","previousMaterial","libraries","previous","material","index","cloned","end","lastMultiMaterial","mi","declared","value","len","a","b","c","src","dst","ua","ub","uc","na","nb","nc","vLen","ia","ib","ic","nLen","uvLen","vertices","vi","l","uvs","uvi","OBJLoader","Loader","manager","url","onLoad","onProgress","onError","scope","loader","FileLoader","text","e","materials","lines","result","i","line","lineFirstChar","data","SRGBColorSpace","vertexData","faceVertices","j","jl","vertex","vertexParts","v1","v2","v3","lineParts","lineVertices","lineUVs","li","llen","parts","pointData","container","Group","object","geometry","isLine","isPoints","hasVertexColors","buffergeometry","BufferGeometry","Float32BufferAttribute","createdMaterials","miLen","sourceMaterial","materialHash","LineBasicMaterial","materialLine","Material","PointsMaterial","materialPoints","MeshPhongMaterial","mesh","LineSegments","Points","Mesh","points"],"mappings":"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","x_google_ignoreList":[0]}
|