610 lines
288 KiB
JavaScript
610 lines
288 KiB
JavaScript
|
function bn(e,t){const n=Object.create(null),s=e.split(",");for(let r=0;r<s.length;r++)n[s[r]]=!0;return t?r=>!!n[r.toLowerCase()]:r=>!!n[r]}function Xe(e){if(X(e)){const t={};for(let n=0;n<e.length;n++){const s=e[n],r=Me(s)?Mu(s):Xe(s);if(r)for(const i in r)t[i]=r[i]}return t}else{if(Me(e))return e;if(we(e))return e}}const Pu=/;(?![^(]*\))/g,Cu=/:([^]+)/,Ou=/\/\*.*?\*\//gs;function Mu(e){const t={};return e.replace(Ou,"").split(Pu).forEach(n=>{if(n){const s=n.split(Cu);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Te(e){let t="";if(Me(e))t=e;else if(X(e))for(let n=0;n<e.length;n++){const s=Te(e[n]);s&&(t+=s+" ")}else if(we(e))for(const n in e)e[n]&&(t+=n+" ");return t.trim()}function qe(e){if(!e)return null;let{class:t,style:n}=e;return t&&!Me(t)&&(e.class=Te(t)),n&&(e.style=Xe(n)),e}const Iu="html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot",Ru="svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistanceLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view",Au=bn(Iu),Du=bn(Ru),Tu="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Lu=bn(Tu);function bl(e){return!!e||e===""}const xt=e=>Me(e)?e:e==null?"":X(e)||we(e)&&(e.toString===$l||!ne(e.toString))?JSON.stringify(e,xl,2):String(e),xl=(e,t)=>t&&t.__v_isRef?xl(e,t.value):Mn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r])=>(n[`${s} =>`]=r,n),{})}:Sl(t)?{[`Set(${t.size})`]:[...t.values()]}:we(t)&&!X(t)&&!El(t)?String(t):t,ke=Object.freeze({}),os=Object.freeze([]),lt=()=>{},wl=()=>!1,Nu=/^on[^a-z]/,Ys=e=>Nu.test(e),_r=e=>e.startsWith("onUpdate:"),Ne=Object.assign,Go=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},ju=Object.prototype.hasOwnProperty,pe=(e,t)=>ju.call(e,t),X=Array.isArray,Mn=e=>Tr(e)==="[object Map]",Sl=e=>Tr(e)==="[object Set]",ne=e=>typeof e=="function",Me=e=>typeof e=="string",Qo=e=>typeof e=="symbol",we=e=>e!==null&&typeof e=="object",Zo=e=>we(e)&&ne(e.then)&&ne(e.catch),$l=Object.prototype.toString,Tr=e=>$l.call(e),Xo=e=>Tr(e).slice(8,-1),El=e=>Tr(e)==="[object Object]",Jo=e=>Me(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,cr=bn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Fu=bn("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Lr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Vu=/-(\w)/g,Ft=Lr(e=>e.replace(Vu,(t,n)=>n?n.toUpperCase():"")),Bu=/\B([A-Z])/g,Qt=Lr(e=>e.replace(Bu,"-$1").toLowerCase()),Fn=Lr(e=>e.charAt(0).toUpperCase()+e.slice(1)),Sn=Lr(e=>e?`on${Fn(e)}`:""),Ts=(e,t)=>!Object.is(e,t),cn=(e,t)=>{for(let n=0;n<e.length;n++)e[n](t)},yr=(e,t,n)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},br=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Vi;const kl=()=>Vi||(Vi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function xr(e,...t){console.warn(`[Vue warn] ${e}`,...t)}let ft;class Pl{constructor(t=!1){this.detached=t,this
|
|||
|
`),r]);else{const i=[`[Vue warn]: ${e}`,...t];r.length&&i.push(`
|
|||
|
`,...Pd(r)),console.warn(...i)}Un()}function kd(){let e=An[An.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const s=e.component&&e.component.parent;e=s&&s.vnode}return t}function Pd(e){const t=[];return e.forEach((n,s)=>{t.push(...s===0?[]:[`
|
|||
|
`],...Cd(n))}),t}function Cd({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",s=e.component?e.component.parent==null:!1,r=` at <${Yr(e.component,e.type,s)}`,i=">"+n;return e.props?[r,...Od(e.props),i]:[r+i]}function Od(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...Ul(s,e[s]))}),n.length>3&&t.push(" ..."),t}function Ul(e,t,n){return Me(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:_e(t)?(t=Ul(e,le(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):ne(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=le(t),n?t:[`${e}=`,t])}const ai={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",[0]:"setup function",[1]:"render function",[2]:"watcher getter",[3]:"watcher callback",[4]:"watcher cleanup function",[5]:"native event handler",[6]:"component event handler",[7]:"vnode hook",[8]:"directive hook",[9]:"transition hook",[10]:"app errorHandler",[11]:"app warnHandler",[12]:"ref function",[13]:"async component loader",[14]:"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core"};function Gt(e,t,n,s){let r;try{r=s?e(...s):e()}catch(i){Br(i,t,n)}return r}function Ot(e,t,n,s){if(ne(e)){const i=Gt(e,t,n,s);return i&&Zo(i)&&i.catch(a=>{Br(a,t,n)}),i}const r=[];for(let i=0;i<e.length;i++)r.push(Ot(e[i],t,n,s));return r}function Br(e,t,n,s=!0){const r=t?t.vnode:null;if(t){let i=t.parent;const a=t.proxy,l=ai[n];for(;i;){const u=i.ec;if(u){for(let d=0;d<u.length;d++)if(u[d](e,a,l)===!1)return}i=i.parent}const c=t.appContext.config.errorHandler;if(c){Gt(c,null,10,[e,a,l]);return}}Md(e,n,r,s)}function Md(e,t,n,s=!0){{const r=ai[t];if(n&&ur(n),R(`Unhandled error${r?` during execution of ${r}`:""}`),n&&dr(),s)throw e;console.error(e)}}let Ns=!1,_o=!1;const Ze=[];let Dt=0;const is=[];let At=null,on=0;const Kl=Promise.resolve();let li=null;const Id=100;function Mt(e){const t=li||Kl;return e?t.then(this?e.bind(this):e):t}function Rd(e){let t=Dt+1,n=Ze.length;for(;t<n;){const s=t+n>>>1;js(Ze[s])<e?t=s+1:n=s}return t}function Hr(e){(!Ze.length||!Ze.includes(e,Ns&&e.allowRecurse?Dt+1:Dt))&&(e.id==null?Ze.push(e):Ze.splice(Rd(e.id),0,e),Wl())}function Wl(){!Ns&&!_o&&(_o=!0,li=Kl.then(Ql))}function Ad(e){const t=Ze.indexOf(e);t>Dt&&Ze.splice(t,1)}function Yl(e){X(e)?is.push(...e):(!At||!At.includes(e,e.allowRecurse?on+1:on))&&is.push(e),Wl()}function Yi(e,t=Ns?Dt+1:0){for(e=e||new Map;t<Ze.length;t++){const n=Ze[t];if(n&&n.pre){if(ci(e,n))continue;Ze.splice(t,1),t--,n()}}}function Gl(e){if(is.length){const t=[...new Set(is)];if(is.length=0,At){At.push(...t);return}for(At=t,e=e||new Map,At.sort((n,s)=>js(n)-js(s)),on=0;on<At.length;on++)ci(e,At[on])||At[on]();At=null,on=0}}const js=e=>e.id==null?1/0:e.id,Dd=(e,t)=>{const n=js(e)-js(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ql(e){_o=!1,Ns=!0,e=e||new Map,Ze.sort(Dd);const t=n=>ci(e,n);try{for(Dt=0;Dt<Ze.length;Dt++){const n=Ze[Dt];if(n&&n.active!==!1){if(t(n))continue;Gt(n,null,14)}}}finally{Dt=0,Ze.length=0,Gl(e),Ns=!1,li=null,(Ze.length||is.length)&&Ql(e)}}function ci(e,t){if(!e.has(t))e.set(t,1);else{const n=e.get(t);if(n>Id){const s=t.ownerInstance,r=s&&Bs(s.type);return R(`Maximum recursive updates exceeded${r?` in component <${r}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`),!0}else e.set(t,n+1)}}let fn=!1;const es=new Set;kl().__VUE_HMR_RUNTIME__={createRecord:Zr(Zl),rerender:Zr(Nd),reload:Zr(jd)};const Vn=new Map;function Td(e){const t=e.type.__hmrId;let n=Vn.get(t);n||(Zl(t,e.type),n=Vn.get(t)),n.instances.add(e)}function Ld(e){Vn.get(e.type.__hmrId).instances.delete(e)}fu
|
|||
|
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.`:"";R(`Failed to resolve ${e.slice(0,-1)}: ${t}${l}`)}return a}else R(`resolve${Fn(e.slice(0,-1))} can only be used in render() or setup().`)}function Xi(e,t){return e&&(e[t]||e[Ft(t)]||e[Fn(Ft(t))])}function Zs(e,t,n,s){let r;const i=n&&n[s];if(X(e)||Me(e)){r=new Array(e.length);for(let a=0,l=e.length;a<l;a++)r[a]=t(e[a],a,void 0,i&&i[a])}else if(typeof e=="number"){Number.isInteger(e)||R(`The v-for range expect an integer value but got ${e}.`),r=new Array(e);for(let a=0;a<e;a++)r[a]=t(a+1,a,void 0,i&&i[a])}else if(we(e))if(e[Symbol.iterator])r=Array.from(e,(a,l)=>t(a,l,void 0,i&&i[l]));else{const a=Object.keys(e);r=new Array(a.length);for(let l=0,c=a.length;l<c;l++){const u=a[l];r[l]=t(e[u],u,l,i&&i[l])}}else r=[];return n&&(n[s]=r),r}function _n(e,t,n={},s,r){if(He.isCE||He.parent&&as(He.parent)&&He.parent.isCE)return t!=="default"&&(n.name=t),Z("slot",n,s&&s());let i=e[t];i&&i.length>1&&(R("SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template."),i=()=>[]),i&&i._c&&(i._d=!1),$();const a=i&&dc(i(n)),l=te(be,{key:n.key||a&&a.key||`_${t}`},a||(s?s():[]),a&&e._===1?64:-2);return!r&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function dc(e){return e.some(t=>Bn(t)?!(t.type===ct||t.type===be&&!dc(t.children)):!0)?e:null}const So=e=>e?Ec(e)?Wr(e)||e.proxy:So(e.parent):null,Dn=Ne(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>ss(e.props),$attrs:e=>ss(e.attrs),$slots:e=>ss(e.slots),$refs:e=>ss(e.refs),$parent:e=>So(e.parent),$root:e=>So(e.root),$emit:e=>e.emit,$options:e=>vi(e),$forceUpdate:e=>e.f||(e.f=()=>Hr(e.update)),$nextTick:e=>e.n||(e.n=Mt.bind(e.proxy)),$watch:e=>tf.bind(e)}),gi=e=>e==="_"||e==="$",to=(e,t)=>e!==ke&&!e.__isScriptSetup&&pe(e,t),fc={get({_:e},t){const{ctx:n,setupState:s,data:r,props:i,accessCache:a,type:l,appContext:c}=e;if(t==="__isVue")return!0;let u;if(t[0]!=="$"){const h=a[t];if(h!==void 0)switch(h){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(to(s,t))return a[t]=1,s[t];if(r!==ke&&pe(r,t))return a[t]=2,r[t];if((u=e.propsOptions[0])&&pe(u,t))return a[t]=3,i[t];if(n!==ke&&pe(n,t))return a[t]=4,n[t];$o&&(a[t]=0)}}const d=Dn[t];let f,p;if(d)return t==="$attrs"&&(vt(e,"get",t),Er()),d(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ke&&pe(n,t))return a[t]=4,n[t];if(p=c.config.globalProperties,pe(p,t))return p[t];He&&(!Me(t)||t.indexOf("__v")!==0)&&(r!==ke&&gi(t[0])&&pe(r,t)?R(`Property ${JSON.stringify(t)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`):e===He&&R(`Property ${JSON.stringify(t)} was accessed during render but is not defined on instance.`))},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return to(r,t)?(r[t]=n,!0):r.__isScriptSetup&&pe(r,t)?(R(`Cannot mutate <script setup> binding "${t}" from Options API.`),!1):s!==ke&&pe(s,t)?(s[t]=n,!0):pe(e.props,t)?(R(`Attempting to mutate prop "${t}". Props are readonly.`),!1):t[0]==="$"&&t.slice(1)in e?(R(`Attempting to mutate public property "${t}". Properties starting with $ are reserved and readonly.`),!1):(t in e.appContext.config.globalProperties?Object.defineProperty(i,t,{enumerable:!0,configurable:!0,value:n}):i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},a){let l;return!!n[a]||e!==ke&&pe(e,a)||to(t,a)||(l=i[0])&&pe(l,a)||pe(s,a)||pe(Dn,a)||pe(r.config.globalProperties,a)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:pe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};fc.ownKeys=e=>(R("Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead."),Reflect.ownKeys(e));function gf(e){const t={};return Object.defineProperty(t,"_",{configurable:!0,enumerable:!1,get:()=>e}),Object.keys(Dn).forEach(n
|
|||
|
|
|||
|
For more details, see https://link.vuejs.org/feature-flags.`)}}const Ye=ef;function Ff(e){return Vf(e)}function Vf(e,t){jf();const n=kl();n.__VUE__=!0,Xl(n.__VUE_DEVTOOLS_GLOBAL_HOOK__,n);const{insert:s,remove:r,patchProp:i,createElement:a,createText:l,createComment:c,setText:u,setElementText:d,parentNode:f,nextSibling:p,setScopeId:h=lt,insertStaticContent:g}=e,_=(m,v,b,P=null,E=null,D=null,F=!1,A=null,T=fn?!1:!!v.dynamicChildren)=>{if(m===v)return;m&&!gs(m,v)&&(P=z(m),it(m,E,D,!0),m=null),v.patchFlag===-2&&(T=!1,v.dynamicChildren=null);const{type:I,ref:K,shapeFlag:U}=v;switch(I){case Xs:x(m,v,b,P);break;case ct:M(m,v,b,P);break;case fr:m==null?S(v,b,P,F):k(m,v,b,F);break;case be:Ke(m,v,b,P,E,D,F,A,T);break;default:U&1?j(m,v,b,P,E,D,F,A,T):U&6?We(m,v,b,P,E,D,F,A,T):U&64||U&128?I.process(m,v,b,P,E,D,F,A,T,ge):R("Invalid VNode type:",I,`(${typeof I})`)}K!=null&&E&&Co(K,m&&m.ref,D,v||m,!v)},x=(m,v,b,P)=>{if(m==null)s(v.el=l(v.children),b,P);else{const E=v.el=m.el;v.children!==m.children&&u(E,v.children)}},M=(m,v,b,P)=>{m==null?s(v.el=c(v.children||""),b,P):v.el=m.el},S=(m,v,b,P)=>{[m.el,m.anchor]=g(m.children,v,b,P,m.el,m.anchor)},k=(m,v,b,P)=>{if(v.children!==m.children){const E=p(m.anchor);H(m),[v.el,v.anchor]=g(v.children,b,E,P)}else v.el=m.el,v.anchor=m.anchor},C=({el:m,anchor:v},b,P)=>{let E;for(;m&&m!==v;)E=p(m),s(m,b,P),m=E;s(v,b,P)},H=({el:m,anchor:v})=>{let b;for(;m&&m!==v;)b=p(m),r(m),m=b;r(v)},j=(m,v,b,P,E,D,F,A,T)=>{F=F||v.type==="svg",m==null?N(v,b,P,E,D,F,A,T):de(m,v,E,D,F,A,T)},N=(m,v,b,P,E,D,F,A)=>{let T,I;const{type:K,props:U,shapeFlag:Y,transition:ae,dirs:me}=m;if(T=m.el=a(m.type,D,U&&U.is,U),Y&8?d(T,m.children):Y&16&&oe(m.children,T,null,P,E,D&&K!=="foreignObject",F,A),me&&xn(m,null,P,"created"),U){for(const Ee in U)Ee!=="value"&&!cr(Ee)&&i(T,Ee,null,U[Ee],D,m.children,P,E,L);"value"in U&&i(T,"value",null,U.value),(I=U.onVnodeBeforeMount)&&yt(I,P,m)}W(T,m,m.scopeId,F,P),Object.defineProperty(T,"__vnode",{value:m,enumerable:!1}),Object.defineProperty(T,"__vueParentComponent",{value:P,enumerable:!1}),me&&xn(m,null,P,"beforeMount");const Ce=(!E||E&&!E.pendingBranch)&&ae&&!ae.persisted;Ce&&ae.beforeEnter(T),s(T,v,b),((I=U&&U.onVnodeMounted)||Ce||me)&&Ye(()=>{I&&yt(I,P,m),Ce&&ae.enter(T),me&&xn(m,null,P,"mounted")},E)},W=(m,v,b,P,E)=>{if(b&&h(m,b),P)for(let D=0;D<P.length;D++)h(m,P[D]);if(E){let D=E.subTree;if(D.patchFlag>0&&D.patchFlag&2048&&(D=nc(D.children)||D),v===D){const F=E.vnode;W(m,F,F.scopeId,F.slotScopeIds,E.parent)}}},oe=(m,v,b,P,E,D,F,A,T=0)=>{for(let I=T;I<m.length;I++){const K=m[I]=A?an(m[I]):kt(m[I]);_(null,K,v,b,P,E,D,F,A)}},de=(m,v,b,P,E,D,F)=>{const A=v.el=m.el;let{patchFlag:T,dynamicChildren:I,dirs:K}=v;T|=m.patchFlag&16;const U=m.props||ke,Y=v.props||ke;let ae;b&&wn(b,!1),(ae=Y.onVnodeBeforeUpdate)&&yt(ae,b,v,m),K&&xn(v,m,b,"beforeUpdate"),b&&wn(b,!0),fn&&(T=0,F=!1,I=null);const me=E&&v.type!=="foreignObject";if(I?(he(m.dynamicChildren,I,A,b,P,me,D),b&&b.type.__hmrId&&Os(m,v)):F||ue(m,v,A,null,b,P,me,D,!1),T>0){if(T&16)Ae(A,v,U,Y,b,P,E);else if(T&2&&U.class!==Y.class&&i(A,"class",null,Y.class,E),T&4&&i(A,"style",U.style,Y.style,E),T&8){const Ce=v.dynamicProps;for(let Ee=0;Ee<Ce.length;Ee++){const Le=Ce[Ee],St=U[Le],Gn=Y[Le];(Gn!==St||Le==="value")&&i(A,Le,St,Gn,E,m.children,b,P,L)}}T&1&&m.children!==v.children&&d(A,v.children)}else!F&&I==null&&Ae(A,v,U,Y,b,P,E);((ae=Y.onVnodeUpdated)||K)&&Ye(()=>{ae&&yt(ae,b,v,m),K&&xn(v,m,b,"updated")},P)},he=(m,v,b,P,E,D,F)=>{for(let A=0;A<v.length;A++){const T=m[A],I=v[A],K=T.el&&(T.type===be||!gs(T,I)||T.shapeFlag&70)?f(T.el):b;_(T,I,K,null,P,E,D,F,!0)}},Ae=(m,v,b,P,E,D,F)=>{if(b!==P){if(b!==ke)for(const A in b)!cr(A)&&!(A in P)&&i(m,A,b[A],null,F,v.children,E,D,L);for(const A in P){if(cr(A))continue;const T=P[A],I=b[A];T!==I&&A!=="value"&&i(m,A,I,T,F,v.children,E,D,L)}"value"in P&&i(m,"value",b.value,P.value)}},Ke=(m,v,b,P,E,D,F,A,T)=>{const I=v.el=m?m.el:l(""),K=v.anchor=m?m.anchor:l("");let{patchFlag:U,dynamicChildren:Y,slotScopeIds:ae}=v;(fn||U&2048)&&(U=0,T=!1,Y=null),ae&&(A=A?A.concat(ae):ae),m==null?(s(I,b,P),s(K,b,P),oe(v.children,b,K,E,D,F,A,
|
|||
|
Component that was made reactive: `,e)),o(e,t,n,s,r,a,i,!0)}function je(e){return e?Sr(e)||Kr in e?Ne({},e):e:null}function Xt(e,t,n=!1){const{props:s,ref:r,patchFlag:i,children:a}=e,l=t?Yf(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Sc(l),ref:t&&t.ref?n&&r?X(r)?r.concat(pr(t)):[r,pr(t)]:pr(t):r,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i===-1&&X(a)?a.map($c):a,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==be?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Xt(e.ssContent),ssFallback:e.ssFallback&&Xt(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx}}function $c(e){const t=Xt(e);return X(e.children)&&(t.children=e.children.map($c)),t}function at(e=" ",t=0){return Z(Xs,null,e,t)}function ce(e="",t=!1){return t?($(),te(ct,null,e)):Z(ct,null,e)}function kt(e){return e==null||typeof e=="boolean"?Z(ct):X(e)?Z(be,null,e.slice()):typeof e=="object"?an(e):Z(Xs,null,String(e))}function an(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Xt(e)}function yi(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),yi(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!(Kr in t)?t._ctx=He:r===3&&He&&(He.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ne(t)?(t={default:t,_ctx:He},n=32):(t=String(t),s&64?(n=16,t=[at(t)]):n=8);e.children=t,e.shapeFlag|=n}function Yf(...e){const t={};for(let n=0;n<e.length;n++){const s=e[n];for(const r in s)if(r==="class")t.class!==s.class&&(t.class=Te([t.class,s.class]));else if(r==="style")t.style=Xe([t.style,s.style]);else if(Ys(r)){const i=t[r],a=s[r];a&&i!==a&&!(X(i)&&i.includes(a))&&(t[r]=i?[].concat(i,a):a)}else r!==""&&(t[r]=s[r])}return t}function yt(e,t,n,s=null){Ot(e,t,7,[n,s])}const Gf=bc();let Qf=0;function Zf(e,t,n){const s=e.type,r=(t?t.appContext:e.appContext)||Gf,i={uid:Qf++,vnode:e,type:s,parent:t,appContext:r,root:null,next:null,subTree:null,effect:null,update:null,scope:new Pl(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:t?t.provides:Object.create(r.provides),accessCache:null,renderCache:[],components:null,directives:null,propsOptions:hc(s,r),emitsOptions:tc(s,r),emit:null,emitted:null,propsDefaults:ke,inheritAttrs:s.inheritAttrs,ctx:ke,data:ke,props:ke,attrs:ke,slots:ke,refs:ke,setupState:ke,setupContext:null,suspense:n,suspenseId:n?n.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};return i.ctx=gf(i),i.root=t?t.root:i,i.emit=Kd.bind(null,i),e.ce&&e.ce(i),i}let Ve=null;const Kn=()=>Ve||He,us=e=>{Ve=e,e.scope.on()},Tn=()=>{Ve&&Ve.scope.off(),Ve=null},Xf=bn("slot,component");function Mo(e,t){const n=t.isNativeTag||wl;(Xf(e)||n(e))&&R("Do not use built-in or reserved HTML elements as component id: "+e)}function Ec(e){return e.vnode.shapeFlag&4}let Vs=!1;function Jf(e,t=!1){Vs=t;const{props:n,children:s}=e.vnode,r=Ec(e);Ef(e,n,r,t),Df(e,s);const i=r?ep(e,t):void 0;return Vs=!1,i}function ep(e,t){var n;const s=e.type;{if(s.name&&Mo(s.name,e.appContext.config),s.components){const i=Object.keys(s.components);for(let a=0;a<i.length;a++)Mo(i[a],e.appContext.config)}if(s.directives){const i=Object.keys(s.directives);for(let a=0;a<i.length;a++)uc(i[a])}s.compilerOptions&&tp()&&R('"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.')}e.accessCache=Object.create(null),e.proxy=si(new Proxy(e.ctx,fc)),vf(e);const{setup:r}=s;if(r){const i=e.setupContext=r.length>1?Pc(e):null;us(e),zn();const a=Gt(r,e,0,[ss(e.props),i]);if(Un(),Tn(),Zo(a)){if(a.then(Tn,Tn),t)return a.then(l=>{la(e,l,t)}).catch(l=>{Br(l,e,0)});if(e.a
|
|||
|
* vue-router v4.1.6
|
|||
|
* (c) 2022 Eduardo San Martin Morote
|
|||
|
* @license MIT
|
|||
|
*/const Kt=typeof window<"u";function Eh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const ye=Object.assign;function io(e,t){const n={};for(const s in t){const r=t[s];n[s]=_t(r)?r.map(e):e(r)}return n}const Rs=()=>{},_t=Array.isArray;function ve(e){const t=Array.from(arguments).slice(1);console.warn.apply(console,["[Vue Router warn]: "+e].concat(t))}const kh=/\/$/,Ph=e=>e.replace(kh,"");function ao(e,t,n="/"){let s,r={},i="",a="";const l=t.indexOf("#");let c=t.indexOf("?");return l<c&&l>=0&&(c=-1),c>-1&&(s=t.slice(0,c),i=t.slice(c+1,l>-1?l:t.length),r=e(i)),l>-1&&(s=s||t.slice(0,l),a=t.slice(l,t.length)),s=Mh(s??t,n),{fullPath:s+(i&&"?")+i+a,path:s,query:r,hash:a}}function Ch(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Fa(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Va(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&yn(t.matched[s],n.matched[r])&&Bc(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function yn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Bc(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Oh(e[n],t[n]))return!1;return!0}function Oh(e,t){return _t(e)?Ba(e,t):_t(t)?Ba(t,e):e===t}function Ba(e,t){return _t(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Mh(e,t){if(e.startsWith("/"))return e;if(!t.startsWith("/"))return ve(`Cannot resolve a relative location without an absolute path. Trying to resolve "${e}" from "${t}". It should look like "/${t}".`),e;if(!e)return t;const n=t.split("/"),s=e.split("/");let r=n.length-1,i,a;for(i=0;i<s.length;i++)if(a=s[i],a!==".")if(a==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+s.slice(i-(i===s.length?1:0)).join("/")}var qs;(function(e){e.pop="pop",e.push="push"})(qs||(qs={}));var As;(function(e){e.back="back",e.forward="forward",e.unknown=""})(As||(As={}));function Ih(e){if(!e)if(Kt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Ph(e)}const Rh=/^[^#]+#/;function Ah(e,t){return e.replace(Rh,"#")+t}function Dh(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const Qr=()=>({left:window.pageXOffset,top:window.pageYOffset});function Th(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#");if(typeof e.el=="string"&&(!s||!document.getElementById(e.el.slice(1))))try{const i=document.querySelector(e.el);if(s&&i){ve(`The selector "${e.el}" should be passed as "el: document.querySelector('${e.el}')" because it starts with "#".`);return}}catch{ve(`The selector "${e.el}" is invalid. If you are using an id selector, make sure to escape it. You can find more information about escaping characters in selectors at https://mathiasbynens.be/notes/css-escapes or use CSS.escape (https://developer.mozilla.org/en-US/docs/Web/API/CSS/escape).`);return}const r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r){ve(`Couldn't find element using selector "${e.el}" returned by scrollBehavior.`);return}t=Dh(r,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Ha(e,t){return(history.state?history.state.position-t:-1)+e}const No=new Map;function Lh(e,t){No.set(e,t)}function Nh(e){const t=No.get(e);return No.delete(e),t}let jh=()=>location.protocol+"//"+location.host;function Hc(e,t){const{pathname:n,search:s,hash:r}=t,i=e.indexOf("#");if(i>-1){let l=r.includes(e.slice(i))?e.slice(i).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),Fa(c,"")}return Fa(n,e)+s+r}function Fh(e,t,n,s){let r=[],i=[],a=null;const l=({state:p})=>{const h=Hc(e,location),g=n.value,_=t.value;let x=0;if(p){if(n.value=h,t.value=p,a&&a===g){a=null;return}x=_?p.position-_.position:0}
|
|||
|
|
|||
|
history.replaceState(history.state, '', url)
|
|||
|
|
|||
|
You can find more information at https://next.router.vuejs.org/guide/migration/#usage-of-history-state.`),i(d.current,d,!0);const f=ye({},qa(s.value,c,null),{position:d.position+1},u);i(c,f,!1),s.value=c}return{location:s,state:r,push:l,replace:a}}function Bh(e){e=Ih(e);const t=Vh(e),n=Fh(e,t.state,t.location,t.replace);function s(i,a=!0){a||n.pauseListeners(),history.go(i)}const r=ye({location:"",base:e,go:s,createHref:Ah.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Hh(e){return typeof e=="string"||e&&typeof e=="object"}function qc(e){return typeof e=="string"||typeof e=="symbol"}const rn={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},zc=Symbol("navigation failure");var za;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(za||(za={}));const qh={[1]({location:e,currentLocation:t}){return`No match for
|
|||
|
${JSON.stringify(e)}${t?`
|
|||
|
while being at
|
|||
|
`+JSON.stringify(t):""}`},[2]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${Uh(t)}" via a navigation guard.`},[4]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[8]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[16]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function ds(e,t){return ye(new Error(qh[e](t)),{type:e,[zc]:!0},t)}function Ht(e,t){return e instanceof Error&&zc in e&&(t==null||!!(e.type&t))}const zh=["params","query","hash"];function Uh(e){if(typeof e=="string")return e;if("path"in e)return e.path;const t={};for(const n of zh)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const Ua="[^/]+?",Kh={sensitive:!1,strict:!1,start:!0,end:!0},Wh=/[.+*?^${}()[\]/\\]/g;function Yh(e,t){const n=ye({},Kh,t),s=[];let r=n.start?"^":"";const i=[];for(const u of e){const d=u.length?[]:[90];n.strict&&!u.length&&(r+="/");for(let f=0;f<u.length;f++){const p=u[f];let h=40+(n.sensitive?.25:0);if(p.type===0)f||(r+="/"),r+=p.value.replace(Wh,"\\$&"),h+=40;else if(p.type===1){const{value:g,repeatable:_,optional:x,regexp:M}=p;i.push({name:g,repeatable:_,optional:x});const S=M||Ua;if(S!==Ua){h+=10;try{new RegExp(`(${S})`)}catch(C){throw new Error(`Invalid custom RegExp for param "${g}" (${S}): `+C.message)}}let k=_?`((?:${S})(?:/(?:${S}))*)`:`(${S})`;f||(k=x&&u.length<2?`(?:/${k})`:"/"+k),x&&(k+="?"),r+=k,h+=20,x&&(h+=-8),_&&(h+=-20),S===".*"&&(h+=-50)}d.push(h)}s.push(d)}if(n.strict&&n.end){const u=s.length-1;s[u][s[u].length-1]+=.7000000000000001}n.strict||(r+="/?"),n.end?r+="$":n.strict&&(r+="(?:/|$)");const a=new RegExp(r,n.sensitive?"":"i");function l(u){const d=u.match(a),f={};if(!d)return null;for(let p=1;p<d.length;p++){const h=d[p]||"",g=i[p-1];f[g.name]=h&&g.repeatable?h.split("/"):h}return f}function c(u){let d="",f=!1;for(const p of e){(!f||!d.endsWith("/"))&&(d+="/"),f=!1;for(const h of p)if(h.type===0)d+=h.value;else if(h.type===1){const{value:g,repeatable:_,optional:x}=h,M=g in u?u[g]:"";if(_t(M)&&!_)throw new Error(`Provided param "${g}" is an array but it is not repeatable (* or + modifiers)`);const S=_t(M)?M.join("/"):M;if(!S)if(x)p.length<2&&(d.endsWith("/")?d=d.slice(0,-1):f=!0);else throw new Error(`Missing required param "${g}"`);d+=S}}return d||"/"}return{re:a,score:s,keys:i,parse:l,stringify:c}}function Gh(e,t){let n=0;for(;n<e.length&&n<t.length;){const s=t[n]-e[n];if(s)return s;n++}return e.length<t.length?e.length===1&&e[0]===40+40?-1:1:e.length>t.length?t.length===1&&t[0]===40+40?1:-1:0}function Qh(e,t){let n=0;const s=e.score,r=t.score;for(;n<s.length&&n<r.length;){const i=Gh(s[n],r[n]);if(i)return i;n++}if(Math.abs(r.length-s.length)===1){if(Ka(s))return 1;if(Ka(r))return-1}return r.length-s.length}function Ka(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Zh={type:0,value:""},Xh=/[a-zA-Z0-9_]/;function Jh(e){if(!e)return[[]];if(e==="/")return[[Zh]];if(!e.startsWith("/"))throw new Error(`Route paths should start with a "/": "${e}" should be "/${e}".`);function t(h){throw new Error(`ERR (${n})/"${u}": ${h}`)}let n=0,s=n;const r=[];let i;function a(){i&&r.push(i),i=[]}let l=0,c,u="",d="";function f(){u&&(n===0?i.push({type:0,value:u}):n===1||n===2||n===3?(i.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),i.push({type:1,value:u,regexp:d,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),u="")}function p(){u+=c}for(;l<e.length;){if(c=e[l++],c==="\\"&&n!==2){s=n,n=4;continue}switch(n){case 0:c==="/"?(u&&f(),a()):c===":"?(f(),n=1):p();break;case 4:p(),n=s;break;case 1:c==="("?n=2:Xh.test(c)?p():(f(),n=0,c!=="*"&&c!=="?"&&c!=="+"&&l--);break;case 2:c===")"?d[d.length-1]=="\\"?d=d.slice(0,-1)+c:n=3:d+=c;break;case 3:f(),n=0,c!=="*"&&c!=="?"&&c!=="+"&&l--,d="";break;default:t("Unknown state");break}}return n===2&&t(`Unfinished custom RegExp for param "${u}"`),f(),a(),r}function eg(e,t,n){const s=Yh(Jh(e.path),n);{co
|
|||
|
See more at https://next.router.vuejs.org/guide/migration/#removed-star-or-catch-all-routes.`);if(M=eg(k,f,_),f&&C[0]==="/"&&ag(M,f),p?(p.alias.push(M),og(p,M)):(S=S||M,S!==M&&S.alias.push(M),h&&d.name&&!Ya(M)&&a(d.name)),g.children){const H=g.children;for(let j=0;j<H.length;j++)i(H[j],M,p&&p.children[j])}p=p||M,(M.record.components&&Object.keys(M.record.components).length||M.record.name||M.record.redirect)&&c(M)}return S?()=>{a(S)}:Rs}function a(d){if(qc(d)){const f=s.get(d);f&&(s.delete(d),n.splice(n.indexOf(f),1),f.children.forEach(a),f.alias.forEach(a))}else{const f=n.indexOf(d);f>-1&&(n.splice(f,1),d.record.name&&s.delete(d.record.name),d.children.forEach(a),d.alias.forEach(a))}}function l(){return n}function c(d){let f=0;for(;f<n.length&&Qh(d,n[f])>=0&&(d.record.path!==n[f].record.path||!Uc(d,n[f]));)f++;n.splice(f,0,d),d.record.name&&!Ya(d)&&s.set(d.record.name,d)}function u(d,f){let p,h={},g,_;if("name"in d&&d.name){if(p=s.get(d.name),!p)throw ds(1,{location:d});{const S=Object.keys(d.params||{}).filter(k=>!p.keys.find(C=>C.name===k));S.length&&ve(`Discarded invalid param(s) "${S.join('", "')}" when navigating. See https://github.com/vuejs/router/blob/main/packages/router/CHANGELOG.md#414-2022-08-22 for more details.`)}_=p.record.name,h=ye(Wa(f.params,p.keys.filter(S=>!S.optional).map(S=>S.name)),d.params&&Wa(d.params,p.keys.map(S=>S.name))),g=p.stringify(h)}else if("path"in d)g=d.path,g.startsWith("/")||ve(`The Matcher cannot resolve relative paths but received "${g}". Unless you directly called \`matcher.resolve("${g}")\`, this is probably a bug in vue-router. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/router.`),p=n.find(S=>S.re.test(g)),p&&(h=p.parse(g),_=p.record.name);else{if(p=f.name?s.get(f.name):n.find(S=>S.re.test(f.path)),!p)throw ds(1,{location:d,currentLocation:f});_=p.record.name,h=ye({},f.params,d.params),g=p.stringify(h)}const x=[];let M=p;for(;M;)x.unshift(M.record),M=M.parent;return{name:_,path:g,params:h,matched:x,meta:rg(x)}}return e.forEach(d=>i(d)),{addRoute:i,resolve:u,removeRoute:a,getRoutes:l,getRecordMatcher:r}}function Wa(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ng(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:sg(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function sg(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="boolean"?n:n[s];return t}function Ya(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function rg(e){return e.reduce((t,n)=>ye(t,n.meta),{})}function Ga(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function jo(e,t){return e.name===t.name&&e.optional===t.optional&&e.repeatable===t.repeatable}function og(e,t){for(const n of e.keys)if(!n.optional&&!t.keys.find(jo.bind(null,n)))return ve(`Alias "${t.record.path}" and the original record: "${e.record.path}" must have the exact same param named "${n.name}"`);for(const n of t.keys)if(!n.optional&&!e.keys.find(jo.bind(null,n)))return ve(`Alias "${t.record.path}" and the original record: "${e.record.path}" must have the exact same param named "${n.name}"`)}function ig(e,t){t&&t.record.name&&!e.name&&!e.path&&ve(`The route named "${String(t.record.name)}" has a child without a name and an empty path. Using that name won't render the empty path child so you probably want to move the name to the child instead. If this is intentional, add a name to the child route to remove the warning.`)}function ag(e,t){for(const n of t.keys)if(!e.keys.find(jo.bind(null,n)))return ve(`Absolute path "${e.record.path}" must have the exact same param named "${n.name}" as its parent "${t.record.path}".`)}function Uc(e,t){return t.children.some(n=>n===e||Uc(e,n))}const Kc=/#/g,lg=/&/g,cg=/\//g,ug=/=/g,dg=/\?/g,Wc=/\+/g,fg=/%5B/g,pg=/%5D/g,Yc=/%5E/g,mg=/%60/g,Gc=/%7B/g,hg=/%7C/g,Qc=/%7D/g,gg=/%20/g;function Si(e){r
|
|||
|
${e.toString()}
|
|||
|
. If you are returning a value instead of calling "next", make sure to remove the "next" parameter from your function.`;if(typeof u=="object"&&"then"in u)d=d.then(p=>c._called?p:(ve(f),Promise.reject(new Error("Invalid navigation guard"))));else if(u!==void 0&&!c._called){ve(f),l(new Error("Invalid navigation guard"));return}}d.catch(f=>l(f))})}function $g(e,t,n){let s=0;return function(){s++===1&&ve(`The "next" callback was called more than once in one navigation guard when going from "${n.fullPath}" to "${t.fullPath}". It should be called exactly one time in each navigation guard. This will fail in production.`),e._called=!0,s===1&&e.apply(null,arguments)}}function lo(e,t,n,s){const r=[];for(const i of e){!i.components&&!i.children.length&&ve(`Record with path "${i.path}" is either missing a "component(s)" or "children" property.`);for(const a in i.components){let l=i.components[a];{if(!l||typeof l!="object"&&typeof l!="function")throw ve(`Component "${a}" in record with path "${i.path}" is not a valid component. Received "${String(l)}".`),new Error("Invalid route component");if("then"in l){ve(`Component "${a}" in record with path "${i.path}" is a Promise instead of a function that returns a Promise. Did you write "import('./MyPage.vue')" instead of "() => import('./MyPage.vue')" ? This will break in production if not fixed.`);const c=l;l=()=>c}else l.__asyncLoader&&!l.__warnedDefineAsync&&(l.__warnedDefineAsync=!0,ve(`Component "${a}" in record with path "${i.path}" is defined using "defineAsyncComponent()". Write "() => import('./MyPage.vue')" instead of "defineAsyncComponent(() => import('./MyPage.vue'))".`))}if(!(t!=="beforeRouteEnter"&&!i.instances[a]))if(Eg(l)){const u=(l.__vccOpts||l)[t];u&&r.push(ln(u,n,s,i,a))}else{let c=l();"catch"in c||(ve(`Component "${a}" in record with path "${i.path}" is a function that does not return a Promise. If you were passing a functional component, make sure to add a "displayName" to the component. This will break in production if not fixed.`),c=Promise.resolve(c)),r.push(()=>c.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${a}" at "${i.path}"`));const d=Eh(u)?u.default:u;i.components[a]=d;const p=(d.__vccOpts||d)[t];return p&&ln(p,n,s,i,a)()}))}}}return r}function Eg(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Xa(e){const t=G($i),n=G(Zc),s=O(()=>t.resolve(y(e.to))),r=O(()=>{const{matched:c}=s.value,{length:u}=c,d=c[u-1],f=n.matched;if(!d||!f.length)return-1;const p=f.findIndex(yn.bind(null,d));if(p>-1)return p;const h=Ja(c[u-2]);return u>1&&Ja(d)===h&&f[f.length-1].path!==h?f.findIndex(yn.bind(null,c[u-2])):p}),i=O(()=>r.value>-1&&Og(n.params,s.value.params)),a=O(()=>r.value>-1&&r.value===n.matched.length-1&&Bc(n.params,s.value.params));function l(c={}){return Cg(c)?t[y(e.replace)?"replace":"push"](y(e.to)).catch(Rs):Promise.resolve()}if(Kt){const c=Kn();if(c){const u={route:s.value,isActive:i.value,isExactActive:a.value};c.__vrl_devtools=c.__vrl_devtools||[],c.__vrl_devtools.push(u),Qs(()=>{u.route=s.value,u.isActive=i.value,u.isExactActive=a.value},{flush:"post"})}}return{route:s,href:O(()=>s.value.href),isActive:i,isExactActive:a,navigate:l}}const kg=Re({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Xa,setup(e,{slots:t}){const n=Ge(Xa(e)),{options:s}=G($i),r=O(()=>({[el(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[el(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const i=t.default&&t.default(n);return e.custom?i:Js("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},i)}}}),Pg=kg;function Cg(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.
|
|||
|
Use slot props instead:
|
|||
|
|
|||
|
<router-view v-slot="{ Component }">
|
|||
|
<${n}>
|
|||
|
<component :is="Component" />
|
|||
|
</${n}>
|
|||
|
</router-view>`)}}function ys(e,t){const n=ye({},e,{matched:e.matched.map(s=>Bg(s,["instances","children","aliasOf"]))});return{_custom:{type:null,readOnly:!0,display:e.fullPath,tooltip:t,value:n}}}function ar(e){return{_custom:{display:e}}}let Ag=0;function Dg(e,t,n){if(t.__hasDevtools)return;t.__hasDevtools=!0;const s=Ag++;$h({id:"org.vuejs.router"+(s?"."+s:""),label:"Vue Router",packageName:"vue-router",homepage:"https://router.vuejs.org",logo:"https://router.vuejs.org/logo.png",componentStateTypes:["Routing"],app:e},r=>{typeof r.now!="function"&&console.warn("[Vue Router]: You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),r.on.inspectComponent((d,f)=>{d.instanceData&&d.instanceData.state.push({type:"Routing",key:"$route",editable:!1,value:ys(t.currentRoute.value,"Current Route")})}),r.on.visitComponentTree(({treeNode:d,componentInstance:f})=>{if(f.__vrv_devtools){const p=f.__vrv_devtools;d.tags.push({label:(p.name?`${p.name.toString()}: `:"")+p.path,textColor:0,tooltip:"This component is rendered by <router-view>",backgroundColor:Xc})}_t(f.__vrl_devtools)&&(f.__devtoolsApi=r,f.__vrl_devtools.forEach(p=>{let h=tu,g="";p.isExactActive?(h=eu,g="This is exactly active"):p.isActive&&(h=Jc,g="This link is active"),d.tags.push({label:p.route.path,textColor:0,tooltip:g,backgroundColor:h})}))}),De(t.currentRoute,()=>{c(),r.notifyComponentUpdate(),r.sendInspectorTree(l),r.sendInspectorState(l)});const i="router:navigations:"+s;r.addTimelineLayer({id:i,label:`Router${s?" "+s:""} Navigations`,color:4237508}),t.onError((d,f)=>{r.addTimelineEvent({layerId:i,event:{title:"Error during Navigation",subtitle:f.fullPath,logType:"error",time:r.now(),data:{error:d},groupId:f.meta.__navigationId}})});let a=0;t.beforeEach((d,f)=>{const p={guard:ar("beforeEach"),from:ys(f,"Current Location during this navigation"),to:ys(d,"Target location")};Object.defineProperty(d.meta,"__navigationId",{value:a++}),r.addTimelineEvent({layerId:i,event:{time:r.now(),title:"Start of navigation",subtitle:d.fullPath,data:p,groupId:d.meta.__navigationId}})}),t.afterEach((d,f,p)=>{const h={guard:ar("afterEach")};p?(h.failure={_custom:{type:Error,readOnly:!0,display:p?p.message:"",tooltip:"Navigation Failure",value:p}},h.status=ar("❌")):h.status=ar("✅"),h.from=ys(f,"Current Location during this navigation"),h.to=ys(d,"Target location"),r.addTimelineEvent({layerId:i,event:{title:"End of navigation",subtitle:d.fullPath,time:r.now(),data:h,logType:p?"warning":"default",groupId:d.meta.__navigationId}})});const l="router-inspector:"+s;r.addInspector({id:l,label:"Routes"+(s?" "+s:""),icon:"book",treeFilterPlaceholder:"Search routes"});function c(){if(!u)return;const d=u;let f=n.getRoutes().filter(p=>!p.parent);f.forEach(ru),d.filter&&(f=f.filter(p=>Bo(p,d.filter.toLowerCase()))),f.forEach(p=>su(p,t.currentRoute.value)),d.rootNodes=f.map(nu)}let u;r.on.getInspectorTree(d=>{u=d,d.app===e&&d.inspectorId===l&&c()}),r.on.getInspectorState(d=>{if(d.app===e&&d.inspectorId===l){const p=n.getRoutes().find(h=>h.record.__vd_id===d.nodeId);p&&(d.state={options:Lg(p)})}}),r.sendInspectorTree(l),r.sendInspectorState(l)})}function Tg(e){return e.optional?e.repeatable?"*":"?":e.repeatable?"+":""}function Lg(e){const{record:t}=e,n=[{editable:!1,key:"path",value:t.path}];return t.name!=null&&n.push({editable:!1,key:"name",value:t.name}),n.push({editable:!1,key:"regexp",value:e.re}),e.keys.length&&n.push({editable:!1,key:"keys",value:{_custom:{type:null,readOnly:!0,display:e.keys.map(s=>`${s.name}${Tg(s)}`).join(" "),tooltip:"Param keys",value:e.keys}}}),t.redirect!=null&&n.push({editable:!1,key:"redirect",value:t.redirect}),e.alias.length&&n.push({editable:!1,key:"aliases",value:e.alias.map(s=>s.record.path)}),Object.keys(e.record.meta).length&&n.push({editable:!1,key:"meta",value:e.record.meta}),n.push({key:"score",editable:!1,value:{_custom:{type:null,readOnly:!0,display:e.score.map(s=>s.join(", ")).join(" | "),tooltip:"Score
|
|||
|
${JSON.stringify(z,null,2)}
|
|||
|
when navigating to "${w.fullPath}". A redirect must contain a name or path. This will break in production.`),new Error("Invalid redirect");return ye({query:w.query,hash:w.hash,params:"path"in z?{}:w.params},z)}}function N(w,q){const L=u=M(w),z=c.value,fe=w.state,ge=w.force,ie=w.replace===!0,ee=j(L);if(ee)return N(ye(S(ee),{state:typeof ee=="object"?ye({},fe,ee.state):fe,force:ge,replace:ie}),q||L);const m=L;m.redirectedFrom=q;let v;return!ge&&Va(s,z,L)&&(v=ds(16,{to:m,from:z}),$e(z,z,!0,!1)),(v?Promise.resolve(v):oe(m,z)).catch(b=>Ht(b)?Ht(b,2)?b:ue(b):V(b,m,z)).then(b=>{if(b){if(Ht(b,2))return Va(s,M(b.to),m)&&q&&(q._count=q._count?q._count+1:1)>10?(ve(`Detected an infinite redirection in a navigation guard when going from "${z.fullPath}" to "${m.fullPath}". Aborting to avoid a Stack Overflow. This will break in production if not fixed.`),Promise.reject(new Error("Infinite redirect in navigation guard"))):N(ye({replace:ie},S(b.to),{state:typeof b.to=="object"?ye({},fe,b.to.state):fe,force:ge}),q||m)}else b=he(m,z,!0,ie,fe);return de(m,z,b),b})}function W(w,q){const L=k(w,q);return L?Promise.reject(L):Promise.resolve()}function oe(w,q){let L;const[z,fe,ge]=qg(w,q);L=lo(z.reverse(),"beforeRouteLeave",w,q);for(const ee of z)ee.leaveGuards.forEach(m=>{L.push(ln(m,w,q))});const ie=W.bind(null,w,q);return L.push(ie),Zn(L).then(()=>{L=[];for(const ee of i.list())L.push(ln(ee,w,q));return L.push(ie),Zn(L)}).then(()=>{L=lo(fe,"beforeRouteUpdate",w,q);for(const ee of fe)ee.updateGuards.forEach(m=>{L.push(ln(m,w,q))});return L.push(ie),Zn(L)}).then(()=>{L=[];for(const ee of w.matched)if(ee.beforeEnter&&!q.matched.includes(ee))if(_t(ee.beforeEnter))for(const m of ee.beforeEnter)L.push(ln(m,w,q));else L.push(ln(ee.beforeEnter,w,q));return L.push(ie),Zn(L)}).then(()=>(w.matched.forEach(ee=>ee.enterCallbacks={}),L=lo(ge,"beforeRouteEnter",w,q),L.push(ie),Zn(L))).then(()=>{L=[];for(const ee of a.list())L.push(ln(ee,w,q));return L.push(ie),Zn(L)}).catch(ee=>Ht(ee,8)?ee:Promise.reject(ee))}function de(w,q,L){for(const z of l.list())z(w,q,L)}function he(w,q,L,z,fe){const ge=k(w,q);if(ge)return ge;const ie=q===rn,ee=Kt?history.state:{};L&&(z||ie?r.replace(w.fullPath,ye({scroll:ie&&ee&&ee.scroll},fe)):r.push(w.fullPath,fe)),c.value=w,$e(w,q,L,ie),ue()}let Ae;function Ke(){Ae||(Ae=r.listen((w,q,L)=>{if(!nn.listening)return;const z=M(w),fe=j(z);if(fe){N(ye(fe,{replace:!0}),z).catch(Rs);return}u=z;const ge=c.value;Kt&&Lh(Ha(ge.fullPath,L.delta),Qr()),oe(z,ge).catch(ie=>Ht(ie,12)?ie:Ht(ie,2)?(N(ie.to,z).then(ee=>{Ht(ee,20)&&!L.delta&&L.type===qs.pop&&r.go(-1,!1)}).catch(Rs),Promise.reject()):(L.delta&&r.go(-L.delta,!1),V(ie,z,ge))).then(ie=>{ie=ie||he(z,ge,!1),ie&&(L.delta&&!Ht(ie,8)?r.go(-L.delta,!1):L.type===qs.pop&&Ht(ie,20)&&r.go(-1,!1)),de(z,ge,ie)}).catch(Rs)}))}let We=_s(),Se=_s(),Ie;function V(w,q,L){ue(w);const z=Se.list();return z.length?z.forEach(fe=>fe(w,q,L)):(ve("uncaught error during route navigation:"),console.error(w)),Promise.reject(w)}function Q(){return Ie&&c.value!==rn?Promise.resolve():new Promise((w,q)=>{We.add([w,q])})}function ue(w){return Ie||(Ie=!w,Ke(),We.list().forEach(([q,L])=>w?L(w):q()),We.reset()),w}function $e(w,q,L,z){const{scrollBehavior:fe}=e;if(!Kt||!fe)return Promise.resolve();const ge=!L&&Nh(Ha(w.fullPath,0))||(z||!L)&&history.state&&history.state.scroll||null;return Mt().then(()=>fe(w,q,ge)).then(ie=>ie&&Th(ie)).catch(ie=>V(ie,w,q))}const ut=w=>r.go(w);let Qe;const it=new Set,nn={currentRoute:c,listening:!0,addRoute:h,removeRoute:g,hasRoute:x,getRoutes:_,resolve:M,options:e,push:C,replace:H,go:ut,back:()=>ut(-1),forward:()=>ut(1),beforeEach:i.add,beforeResolve:a.add,afterEach:l.add,onError:Se.add,isReady:Q,install(w){const q=this;w.component("RouterLink",Pg),w.component("RouterView",Ig),w.config.globalProperties.$router=q,Object.defineProperty(w.config.globalProperties,"$route",{enumerable:!0,get:()=>y(c)}),Kt&&!Qe&&c.value===rn&&(Qe=!0,C(r.location).catch(fe=>{ve("Unexpected error when starting the router:",fe)}));const L={};for(const fe in rn)L[fe]=O(()=>c.value[fe]);w.provide($i,q),w.provide(Zc,Ge(L
|
|||
|
|
|||
|
`);alert(g),console.warn(g)}return f}const mu=Fe(dt(Kg),dt(Wg),zg);function Av(e,t,n=!1){typeof e=="string"&&(e=ou[e]);const s=Fe(e,mu);let r=0,i;const a=()=>{if(clearTimeout(i),!s.value){r=0;return}n&&(i=setTimeout(a,Math.max(1e3-r*250,150)),r++),t()};return De(s,a,{flush:"sync"})}function Dv(e,t){return km(e,n=>{mu.value&&(n.repeat||t())})}function Tv(){const e=Rv();new Map(e.map(n=>[n.key,n])).forEach(n=>{n.fn&&Av(n.key,n.fn,n.autoRepeat)}),Dv("f",()=>iu.toggle())}const Lv={class:"slidev-icon",viewBox:"0 0 32 32",width:"1.2em",height:"1.2em"},Nv=o("path",{fill:"currentColor",d:"M24 9.4L22.6 8L16 14.6L9.4 8L8 9.4l6.6 6.6L8 22.6L9.4 24l6.6-6.6l6.6 6.6l1.4-1.4l-6.6-6.6L24 9.4z"},null,-1),jv=[Nv];function Fv(e,t){return $(),B("svg",Lv,jv)}const Vv={name:"carbon-close",render:Fv};function Pi(e){var n,s;const t=(s=(n=e==null?void 0:e.meta)==null?void 0:n.slide)==null?void 0:s.no;return t!=null?`slidev-page-${t}`:""}const Bv=Re({__name:"SlideContainer",props:{width:{type:Number},meta:{default:()=>({})},scale:{type:[Number,String]}},setup(e){const t=e;G(se);const n=J(),s=th(n),r=O(()=>t.width?t.width:s.width.value),i=O(()=>t.width?t.width/pn:s.height.value);t.width&&Qs(()=>{n.value&&(n.value.style.width=`${r.value}px`,n.value.style.height=`${i.value}px`)});const a=O(()=>r.value/i.value),l=O(()=>t.scale?t.scale:a.value<pn?r.value/mn:i.value*pn/mn),c=O(()=>({height:`${bi}px`,width:`${mn}px`,transform:`translate(-50%, -50%) scale(${l.value})`})),u=O(()=>({"select-none":!Oe.selectable,"slidev-code-line-numbers":Oe.lineNumbers}));return mt(Mc,l),(d,f)=>($(),B("div",{id:"slide-container",ref_key:"root",ref:n,class:Te(y(u))},[o("div",{id:"slide-content",style:Xe(y(c))},[_n(d.$slots,"default")],4),_n(d.$slots,"controls")],2))}});const re=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},hu=re(Bv,[["__file","/tmp/projet-probleme-inverse-3D/docs/node_modules/@slidev/client/internals/SlideContainer.vue"]]),Ci=Re({props:{clicks:{type:[Number,String],default:0},clicksElements:{type:Array,default:()=>[]},clicksOrderMap:{type:Map,default:()=>new Map},clicksDisabled:{type:Boolean,default:!1},context:{type:String,default:"main"},is:{type:Object,default:void 0},route:{type:Object,default:void 0}},setup(e,{emit:t}){const n=Nt(e,"clicks",t),s=Nt(e,"clicksElements",t),r=Nt(e,"clicksDisabled",t),i=Nt(e,"clicksOrderMap",t);s.value.length=0,mt(Fp,e.route),mt(Vp,e.context),mt(Tp,n),mt(jp,r),mt(Lp,s),mt(Np,i)},render(){var e,t;return this.$props.is?Js(this.$props.is):(t=(e=this.$slots)==null?void 0:e.default)==null?void 0:t.call(e)}}),Hv=["innerHTML"],qv=Re({__name:"DrawingPreview",props:{page:{type:Number,required:!0}},setup(e){return G(se),(t,n)=>y(Cr)[e.page]?($(),B("svg",{key:0,ref:"svg",class:"w-full h-full absolute top-0 pointer-events-none",innerHTML:y(Cr)[e.page]},null,8,Hv)):ce("v-if",!0)}}),gu=re(qv,[["__file","/tmp/projet-probleme-inverse-3D/docs/node_modules/@slidev/client/internals/DrawingPreview.vue"]]),zv=Object.freeze(Object.defineProperty({__proto__:null,default:gu},Symbol.toStringTag,{value:"Module"})),Uv={class:"slides-overview bg-main !bg-opacity-75 p-16 overflow-y-auto"},Kv=["onClick"],Wv=Re({__name:"SlidesOverview",props:{modelValue:{type:Boolean,required:!0}},emits:[],setup(e,{emit:t}){const n=e;G(se);const s=Nt(n,"modelValue",t);function r(){s.value=!1}function i(h){fs(h),r()}function a(h){return h===gt.value}const l=Ho.smaller("xs"),c=Ho.smaller("sm"),u=4*16*2,d=2*16,f=O(()=>l.value?Ln.width.value-u:c.value?(Ln.width.value-u-d)/2:300),p=O(()=>Math.floor((Ln.width.value-u)/(f.value+d)));return Qs(()=>{gt.value=ze.value,ki.value=p.value}),(h,g)=>{const _=Vv;return $(),B(be,null,[hi(o("div",Uv,[o("div",{class:"grid gap-y-4 gap-x-8 w-full",style:Xe(`grid-template-columns: repeat(auto-fit,minmax(${y(f)}px,1fr))`)},[($(!0),B(be,null,Zs(y(Be).slice(0,-1),(x,M)=>($(),B("div",{key:x.path,class:"relative"},[o("div",{class:Te(["inline-block border rounded border-opacity-50 overflow-hidden bg-main hover:border-$slidev-theme-primary",{"border-$slidev-theme-primary":a(M+1),"border-gray-400":!a(M+1)}]),style:Xe(y(xi)),onCli
|
|||
|
|
|||
|
`+e.mark.snippet),s+" "+n):s}function Ws(e,t){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=t,this.message=xu(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Ws.prototype=Object.create(Error.prototype);Ws.prototype.constructor=Ws;Ws.prototype.toString=function(t){return this.name+": "+xu(this,t)};var kn=Ws,I1=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],R1=["scalar","sequence","mapping"];function A1(e){var t={};return e!==null&&Object.keys(e).forEach(function(n){e[n].forEach(function(s){t[String(s)]=n})}),t}function D1(e,t){if(t=t||{},Object.keys(t).forEach(function(n){if(I1.indexOf(n)===-1)throw new kn('Unknown option "'+n+'" is met in definition of "'+e+'" YAML type.')}),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(n){return n},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=A1(t.styleAliases||null),R1.indexOf(this.kind)===-1)throw new kn('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var Je=D1;function pl(e,t){var n=[];return e[t].forEach(function(s){var r=n.length;n.forEach(function(i,a){i.tag===s.tag&&i.kind===s.kind&&i.multi===s.multi&&(r=a)}),n[r]=s}),n}function T1(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},t,n;function s(r){r.multi?(e.multi[r.kind].push(r),e.multi.fallback.push(r)):e[r.kind][r.tag]=e.fallback[r.tag]=r}for(t=0,n=arguments.length;t<n;t+=1)arguments[t].forEach(s);return e}function Wo(e){return this.extend(e)}Wo.prototype.extend=function(t){var n=[],s=[];if(t instanceof Je)s.push(t);else if(Array.isArray(t))s=s.concat(t);else if(t&&(Array.isArray(t.implicit)||Array.isArray(t.explicit)))t.implicit&&(n=n.concat(t.implicit)),t.explicit&&(s=s.concat(t.explicit));else throw new kn("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");n.forEach(function(i){if(!(i instanceof Je))throw new kn("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(i.loadKind&&i.loadKind!=="scalar")throw new kn("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(i.multi)throw new kn("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),s.forEach(function(i){if(!(i instanceof Je))throw new kn("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var r=Object.create(Wo.prototype);return r.implicit=(this.implicit||[]).concat(n),r.explicit=(this.explicit||[]).concat(s),r.compiledImplicit=pl(r,"implicit"),r.compiledExplicit=pl(r,"explicit"),r.compiledTypeMap=T1(r.compiledImplicit,r.compiledExplicit),r};var L1=Wo,N1=new Je("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return e!==null?e:""}}),j1=new Je("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return e!==null?e:[]}}),F1=new Je("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return e!==null?e:{}}}),V1=new L1({explicit:[N1,j1,F1]});function B1(e){if(e===null)return!0;var t=e.length;return t===1&&e==="~"||t===4&&(e==="null"||e==="Null"||e==="NULL")}function H1(){return null}function q1(e){return e===null}var z1=new Je("tag:yaml.org,2002:null",{kind:"scalar",resolve:B1,construct:H1,predicate:q1,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function U1(e){if(e===null)return!1;var t=e.length;return t===4&&(e==="true"||e==="True"||e==="TRUE")||t===5&&(e==="false"||e==="False"||e==="FALSE")}function K1(e){return e==="true"||e==="True"||e==="TRUE"}
|
|||
|
\r`;function vy(e){if(e===null)return!1;var t,n,s=0,r=e.length,i=Mi;for(n=0;n<r;n++)if(t=i.indexOf(e.charAt(n)),!(t>64)){if(t<0)return!1;s+=6}return s%8===0}function _y(e){var t,n,s=e.replace(/[\r\n=]/g,""),r=s.length,i=Mi,a=0,l=[];for(t=0;t<r;t++)t%4===0&&t&&(l.push(a>>16&255),l.push(a>>8&255),l.push(a&255)),a=a<<6|i.indexOf(s.charAt(t));return n=r%4*6,n===0?(l.push(a>>16&255),l.push(a>>8&255),l.push(a&255)):n===18?(l.push(a>>10&255),l.push(a>>2&255)):n===12&&l.push(a>>4&255),new Uint8Array(l)}function yy(e){var t="",n=0,s,r,i=e.length,a=Mi;for(s=0;s<i;s++)s%3===0&&s&&(t+=a[n>>18&63],t+=a[n>>12&63],t+=a[n>>6&63],t+=a[n&63]),n=(n<<8)+e[s];return r=i%3,r===0?(t+=a[n>>18&63],t+=a[n>>12&63],t+=a[n>>6&63],t+=a[n&63]):r===2?(t+=a[n>>10&63],t+=a[n>>4&63],t+=a[n<<2&63],t+=a[64]):r===1&&(t+=a[n>>2&63],t+=a[n<<4&63],t+=a[64],t+=a[64]),t}function by(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var xy=new Je("tag:yaml.org,2002:binary",{kind:"scalar",resolve:vy,construct:_y,predicate:by,represent:yy}),wy=Object.prototype.hasOwnProperty,Sy=Object.prototype.toString;function $y(e){if(e===null)return!0;var t=[],n,s,r,i,a,l=e;for(n=0,s=l.length;n<s;n+=1){if(r=l[n],a=!1,Sy.call(r)!=="[object Object]")return!1;for(i in r)if(wy.call(r,i))if(!a)a=!0;else return!1;if(!a)return!1;if(t.indexOf(i)===-1)t.push(i);else return!1}return!0}function Ey(e){return e!==null?e:[]}var ky=new Je("tag:yaml.org,2002:omap",{kind:"sequence",resolve:$y,construct:Ey}),Py=Object.prototype.toString;function Cy(e){if(e===null)return!0;var t,n,s,r,i,a=e;for(i=new Array(a.length),t=0,n=a.length;t<n;t+=1){if(s=a[t],Py.call(s)!=="[object Object]"||(r=Object.keys(s),r.length!==1))return!1;i[t]=[r[0],s[r[0]]]}return!0}function Oy(e){if(e===null)return[];var t,n,s,r,i,a=e;for(i=new Array(a.length),t=0,n=a.length;t<n;t+=1)s=a[t],r=Object.keys(s),i[t]=[r[0],s[r[0]]];return i}var My=new Je("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:Cy,construct:Oy}),Iy=Object.prototype.hasOwnProperty;function Ry(e){if(e===null)return!0;var t,n=e;for(t in n)if(Iy.call(n,t)&&n[t]!==null)return!1;return!0}function Ay(e){return e!==null?e:{}}var Dy=new Je("tag:yaml.org,2002:set",{kind:"mapping",resolve:Ry,construct:Ay});uy.extend({implicit:[my,gy],explicit:[xy,ky,My,Dy]});function ml(e){return e===48?"\0":e===97?"\x07":e===98?"\b":e===116||e===9?" ":e===110?`
|
|||
|
`:e===118?"\v":e===102?"\f":e===114?"\r":e===101?"\x1B":e===32?" ":e===34?'"':e===47?"/":e===92?"\\":e===78?"
":e===95?" ":e===76?"\u2028":e===80?"\u2029":""}var Ty=new Array(256),Ly=new Array(256);for(var Jn=0;Jn<256;Jn++)Ty[Jn]=ml(Jn)?1:0,Ly[Jn]=ml(Jn);function Ny(e){return Array.from(new Set(e))}function hl(...e){let t,n,s;e.length===1?(t=0,s=1,[n]=e):[t,n,s=1]=e;const r=[];let i=t;for(;i<n;)r.push(i),i+=s||1;return r}function jy(e,t){if(!t||t==="all"||t==="*")return hl(1,e+1);const n=[];for(const s of t.split(/[,;]/g))if(!s.includes("-"))n.push(+s);else{const[r,i]=s.split("-",2);n.push(...hl(+r,i?+i+1:e+1))}return Ny(n).filter(s=>s<=e).sort((s,r)=>s-r)}function Fy(e){const t=O(()=>e.value.path),n=O(()=>Be.length-1),s=O(()=>parseInt(t.value.split(/\//g).slice(-1)[0])||1),r=O(()=>Ai(s.value)),i=O(()=>Be.find(p=>p.path===`${s.value}`)),a=O(()=>{var p,h,g;return(g=(h=(p=i.value)==null?void 0:p.meta)==null?void 0:h.slide)==null?void 0:g.id}),l=O(()=>{var p,h;return((h=(p=i.value)==null?void 0:p.meta)==null?void 0:h.layout)||(s.value===1?"cover":"default")}),c=O(()=>Be.find(p=>p.path===`${Math.min(Be.length,s.value+1)}`)),u=O(()=>Be.filter(p=>{var h,g;return(g=(h=p.meta)==null?void 0:h.slide)==null?void 0:g.title}).reduce((p,h)=>(Di(p,h),p),[])),d=O(()=>Ti(u.value,i.value)),f=O(()=>Li(d.value));return{route:e,path:t,total:n,currentPage:s,currentPath:r,currentRoute:i,currentSlideId:a,currentLayout:l,nextRoute:c,rawTree:u,treeWithActiveStatuses:d,tree:f}}function Vy(e,t,n){const s=J(0);Mt(()=>{hn.afterEach(async()=>{await Mt(),s.value+=1})});const r=O(()=>{var c,u;return s.value,((u=(c=t.value)==null?void 0:c.meta)==null?void 0:u.__clicksElements)||[]}),i=O(()=>{var c,u;return+(((u=(c=t.value)==null?void 0:c.meta)==null?void 0:u.clicks)??r.value.length)}),a=O(()=>n.value<Be.length-1||e.value<i.value),l=O(()=>n.value>1||e.value>0);return{clicks:e,clicksElements:r,clicksTotal:i,hasNext:a,hasPrev:l}}const By=["id"],Hy=Re({__name:"PrintSlideClick",props:{clicks:{type:Number,required:!0},clicksElements:{type:Array,required:!1},nav:{type:null,required:!0},route:{type:null,required:!0}},emits:["update:clicksElements"],setup(e,{emit:t}){const n=e,s=Nt(n,"clicksElements",t),r=O(()=>({height:`${bi}px`,width:`${mn}px`})),i=Vt();Hn(()=>Promise.resolve().then(()=>zv),void 0).then(u=>i.value=u.default);const a=O(()=>n.clicks),l=Vy(a,n.nav.currentRoute,n.nav.currentPage),c=O(()=>`${n.route.path.toString().padStart(3,"0")}-${(a.value+1).toString().padStart(2,"0")}`);return mt(se,Ge({nav:{...n.nav,...l},configs:Oe,themeConfigs:O(()=>Oe.themeConfig)})),(u,d)=>{var f;return $(),B("div",{id:y(c),class:"slide-container",style:Xe(y(r))},[Z(y(yu)),Z(y(Ci),{is:(f=e.route)==null?void 0:f.component,"clicks-elements":y(s),"onUpdate:clicks-elements":d[0]||(d[0]=p=>_e(s)?s.value=p:null),clicks:y(a),"clicks-disabled":!1,class:Te(y(Pi)(e.route)),route:e.route},null,8,["is","clicks-elements","clicks","class","route"]),y(i)?($(),te(y(i),{key:0,page:+e.route.path},null,8,["page"])):ce("v-if",!0),Z(y(_u))],12,By)}}}),gl=re(Hy,[["__file","/tmp/projet-probleme-inverse-3D/docs/node_modules/@slidev/client/internals/PrintSlideClick.vue"]]),qy=Re({__name:"PrintSlide",props:{route:{type:null,required:!0}},setup(e){var i;const t=e;G(se);const n=Ge(((i=t.route.meta)==null?void 0:i.__clicksElements)||[]),s=O(()=>t.route),r=Fy(s);return(a,l)=>($(),B(be,null,[Z(gl,{"clicks-elements":n,"onUpdate:clicks-elements":l[0]||(l[0]=c=>n=c),clicks:0,nav:y(r),route:y(s)},null,8,["clicks-elements","nav","route"]),y(Eu)?ce("v-if",!0):($(!0),B(be,{key:0},Zs(n.length,c=>($(),te(gl,{key:c,clicks:c,nav:y(r),route:y(s)},null,8,["clicks","nav","route"]))),128))],64))}}),zy=re(qy,[["__file","/tmp/projet-probleme-inverse-3D/docs/node_modules/@slidev/client/internals/PrintSlide.vue"]]),Uy={id:"print-content"},Ky=Re({__name:"PrintContainer",props:{width:{type:Number,required:!0}},setup(e){const t=e;G(se);const n=O(()=>t.width),s=O(()=>t.width/pn),r=O(()=>n.value/s.value),i=O(()=>r.value<pn?n.value/mn:s.value*pn/mn);let a=Be.slice(0,-1);Bt.value.query.range&&(a=jy(a.length,Bt.value.query.ran
|
|||
|
theme: academic
|
|||
|
class: text-white
|
|||
|
coverAuthor: Laurent Fainsin, Damien Guillotin, Pierre-Eliot Jourdan
|
|||
|
coverBackgroundUrl: https://images.unsplash.com/photo-1655720408861-8b04c0724fd9?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8
|
|||
|
coverBackgroundSource: unplash
|
|||
|
coverBackgroundSourceUrl: https://unsplash.com/photos/Vc0CmuIfMg0
|
|||
|
coverDate: '2023-02-01'
|
|||
|
themeConfig:
|
|||
|
paginationX: r
|
|||
|
paginationY: t
|
|||
|
paginationPagesDisabled:
|
|||
|
- 1
|
|||
|
title: Bureau d'étude de PI3D
|
|||
|
---
|
|||
|
|
|||
|
<h2 class="opacity-50" style="font-size: 2rem;">Bureau d'étude de PI3D</h2>
|
|||
|
|
|||
|
<h1 style="font-size: 2.4rem;">Sujet 6 - Reformulation du MVS par level sets</h1>
|
|||
|
`,title:"Bureau d'étude de PI3D",level:1,content:`<h2 class="opacity-50" style="font-size: 2rem;">Bureau d'étude de PI3D</h2>
|
|||
|
|
|||
|
<h1 style="font-size: 2.4rem;">Sujet 6 - Reformulation du MVS par level sets</h1>`,frontmatter:{theme:"academic",class:"text-white",coverAuthor:"Laurent Fainsin, Damien Guillotin, Pierre-Eliot Jourdan",coverBackgroundUrl:"https://images.unsplash.com/photo-1655720408861-8b04c0724fd9?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8",coverBackgroundSource:"unplash",coverBackgroundSourceUrl:"https://unsplash.com/photos/Vc0CmuIfMg0",coverDate:"2023-02-01",themeConfig:{paginationX:"r",paginationY:"t",paginationPagesDisabled:[1]},title:"Bureau d'étude de PI3D"},index:0,start:0,end:20,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:0,no:1},__clicksElements:[],__preloaded:!1}},{path:"2",name:"page-2",component:yb,meta:{slide:{raw:`
|
|||
|
## Plan du BE
|
|||
|
|
|||
|
<div class="h-100 flex items-center text-2xl">
|
|||
|
|
|||
|
- Définitions
|
|||
|
- L'idée générale
|
|||
|
- Hyposthèses
|
|||
|
- L'algorithme
|
|||
|
- Résultats
|
|||
|
- Conclusion
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<!--
|
|||
|
Notre objectif dans ce BE c'était donc d'implémenter ce procédé.
|
|||
|
Et pour ce faire on avait besoin de faire les étapes suivantes:
|
|||
|
|
|||
|
|
|||
|
- Définitions
|
|||
|
1. Level sets
|
|||
|
2. MVS
|
|||
|
- L'idée générale
|
|||
|
- Hyposthèses
|
|||
|
1. Discrétisation de l'espace
|
|||
|
2. Binarisation du levelset
|
|||
|
- L'algorithme
|
|||
|
1. Initialisation du volume
|
|||
|
2. Mise à jour du volume
|
|||
|
- Résultats
|
|||
|
- Conclusion
|
|||
|
|
|||
|
-->
|
|||
|
`,title:"Plan du BE",level:2,content:`## Plan du BE
|
|||
|
|
|||
|
<div class="h-100 flex items-center text-2xl">
|
|||
|
|
|||
|
- Définitions
|
|||
|
- L'idée générale
|
|||
|
- Hyposthèses
|
|||
|
- L'algorithme
|
|||
|
- Résultats
|
|||
|
- Conclusion
|
|||
|
|
|||
|
</div>`,frontmatter:{},note:`Notre objectif dans ce BE c'était donc d'implémenter ce procédé.
|
|||
|
Et pour ce faire on avait besoin de faire les étapes suivantes:
|
|||
|
|
|||
|
|
|||
|
- Définitions
|
|||
|
1. Level sets
|
|||
|
2. MVS
|
|||
|
- L'idée générale
|
|||
|
- Hyposthèses
|
|||
|
1. Discrétisation de l'espace
|
|||
|
2. Binarisation du levelset
|
|||
|
- L'algorithme
|
|||
|
1. Initialisation du volume
|
|||
|
2. Mise à jour du volume
|
|||
|
- Résultats
|
|||
|
- Conclusion`,index:1,start:21,end:55,notesHTML:`<p>Notre objectif dans ce BE c'était donc d'implémenter ce procédé.
|
|||
|
Et pour ce faire on avait besoin de faire les étapes suivantes:</p>
|
|||
|
<ul>
|
|||
|
<li>Définitions
|
|||
|
<ol>
|
|||
|
<li>Level sets</li>
|
|||
|
<li>MVS</li>
|
|||
|
</ol>
|
|||
|
</li>
|
|||
|
<li>L'idée générale</li>
|
|||
|
<li>Hyposthèses
|
|||
|
<ol>
|
|||
|
<li>Discrétisation de l'espace</li>
|
|||
|
<li>Binarisation du levelset</li>
|
|||
|
</ol>
|
|||
|
</li>
|
|||
|
<li>L'algorithme
|
|||
|
<ol>
|
|||
|
<li>Initialisation du volume</li>
|
|||
|
<li>Mise à jour du volume</li>
|
|||
|
</ol>
|
|||
|
</li>
|
|||
|
<li>Résultats</li>
|
|||
|
<li>Conclusion</li>
|
|||
|
</ul>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:1,no:2},__clicksElements:[],__preloaded:!1}},{path:"3",name:"page-3",component:kb,meta:{slide:{raw:`
|
|||
|
## Définition
|
|||
|
### Level sets
|
|||
|
|
|||
|
<img src="/figs/lvl7_2D.gif" class="m-auto"/>
|
|||
|
|
|||
|
$\\mathcal{V} = \\{ \\textbf{Q} = (X, Y) \\in \\mathbb{R}^2, u(\\textbf{Q}) > s \\}, \\quad s\\in [0,1], \\quad u \\colon \\mathbb{R}^2 \\to [0, 1]$
|
|||
|
|
|||
|
|
|||
|
<!--
|
|||
|
level set ≃ un seuillage. \\
|
|||
|
Ici on représente le seuillage d'une fonction par un contour rouge, avec le resultat binarisé à droite.
|
|||
|
Ça fait un peu penser aux contours actifs, et on peut considérer les levels sets comme une généralisation des contours actifs.
|
|||
|
|
|||
|
Définition mathématique et continue des levels sets:
|
|||
|
|
|||
|
Volume = Ensemble des points de l'espace tel que, l'image de ces points par une fonction valide une condition
|
|||
|
|
|||
|
- V -> volume (2D ici, noir à droite)
|
|||
|
- Q -> point 2D de l'espace
|
|||
|
- u -> fonction indicatrice (que l'on souhaite apprendre) qui indique "l'intériorité" d'un point Q dans V
|
|||
|
- s -> seuil qui détermine la valeur à partir de laquelle on est dans V
|
|||
|
-->
|
|||
|
`,title:"Définition",level:2,content:`## Définition
|
|||
|
### Level sets
|
|||
|
|
|||
|
<img src="/figs/lvl7_2D.gif" class="m-auto"/>
|
|||
|
|
|||
|
$\\mathcal{V} = \\{ \\textbf{Q} = (X, Y) \\in \\mathbb{R}^2, u(\\textbf{Q}) > s \\}, \\quad s\\in [0,1], \\quad u \\colon \\mathbb{R}^2 \\to [0, 1]$`,frontmatter:{},note:`level set ≃ un seuillage. \\
|
|||
|
Ici on représente le seuillage d'une fonction par un contour rouge, avec le resultat binarisé à droite.
|
|||
|
Ça fait un peu penser aux contours actifs, et on peut considérer les levels sets comme une généralisation des contours actifs.
|
|||
|
|
|||
|
Définition mathématique et continue des levels sets:
|
|||
|
|
|||
|
Volume = Ensemble des points de l'espace tel que, l'image de ces points par une fonction valide une condition
|
|||
|
|
|||
|
- V -> volume (2D ici, noir à droite)
|
|||
|
- Q -> point 2D de l'espace
|
|||
|
- u -> fonction indicatrice (que l'on souhaite apprendre) qui indique "l'intériorité" d'un point Q dans V
|
|||
|
- s -> seuil qui détermine la valeur à partir de laquelle on est dans V`,index:2,start:56,end:80,notesHTML:`<p>level set ≃ un seuillage. <br>
|
|||
|
Ici on représente le seuillage d'une fonction par un contour rouge, avec le resultat binarisé à droite.
|
|||
|
Ça fait un peu penser aux contours actifs, et on peut considérer les levels sets comme une généralisation des contours actifs.</p>
|
|||
|
<p>Définition mathématique et continue des levels sets:</p>
|
|||
|
<p>Volume = Ensemble des points de l'espace tel que, l'image de ces points par une fonction valide une condition</p>
|
|||
|
<ul>
|
|||
|
<li>V -> volume (2D ici, noir à droite)</li>
|
|||
|
<li>Q -> point 2D de l'espace</li>
|
|||
|
<li>u -> fonction indicatrice (que l'on souhaite apprendre) qui indique "l'intériorité" d'un point Q dans V</li>
|
|||
|
<li>s -> seuil qui détermine la valeur à partir de laquelle on est dans V</li>
|
|||
|
</ul>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:2,no:3},__clicksElements:[],__preloaded:!1}},{path:"4",name:"page-4",component:Ib,meta:{slide:{raw:`
|
|||
|
### Exemple Level sets 3D
|
|||
|
|
|||
|
<div class="flex items-center">
|
|||
|
<img src="/figs/lvl7_3D.gif" class="h-110"/>
|
|||
|
<figure>
|
|||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/MarchingCubes.svg/350px-MarchingCubes.svg.png" class="h-50">
|
|||
|
<figcaption class="text-center">Marching cubes</figcaption>
|
|||
|
<!-- mettre lien ici -->
|
|||
|
</figure>
|
|||
|
</div>
|
|||
|
|
|||
|
<!--
|
|||
|
La définition précédente se généralise très bien aux espace de dimension supérieurs, voici un exemple 3D.
|
|||
|
Juste on vous parle de la 2D psk c'est plus simple.
|
|||
|
Par exemple ici on peut pas représenter u, car il nous faudrait une représentation 4D.
|
|||
|
Par contre on peut vous montrer le résultat de V_t pour différent t.
|
|||
|
En ce qui concerne le rendu de la surface 3D, on utilise l'ago de marching cubes.
|
|||
|
-->
|
|||
|
`,title:"Exemple Level sets 3D",level:3,content:`### Exemple Level sets 3D
|
|||
|
|
|||
|
<div class="flex items-center">
|
|||
|
<img src="/figs/lvl7_3D.gif" class="h-110"/>
|
|||
|
<figure>
|
|||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/MarchingCubes.svg/350px-MarchingCubes.svg.png" class="h-50">
|
|||
|
<figcaption class="text-center">Marching cubes</figcaption>
|
|||
|
<!-- mettre lien ici -->
|
|||
|
</figure>
|
|||
|
</div>`,frontmatter:{},note:`La définition précédente se généralise très bien aux espace de dimension supérieurs, voici un exemple 3D.
|
|||
|
Juste on vous parle de la 2D psk c'est plus simple.
|
|||
|
Par exemple ici on peut pas représenter u, car il nous faudrait une représentation 4D.
|
|||
|
Par contre on peut vous montrer le résultat de V_t pour différent t.
|
|||
|
En ce qui concerne le rendu de la surface 3D, on utilise l'ago de marching cubes.`,index:3,start:81,end:101,notesHTML:`<p>La définition précédente se généralise très bien aux espace de dimension supérieurs, voici un exemple 3D.
|
|||
|
Juste on vous parle de la 2D psk c'est plus simple.
|
|||
|
Par exemple ici on peut pas représenter u, car il nous faudrait une représentation 4D.
|
|||
|
Par contre on peut vous montrer le résultat de V_t pour différent t.
|
|||
|
En ce qui concerne le rendu de la surface 3D, on utilise l'ago de marching cubes.</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:3,no:4},__clicksElements:[],__preloaded:!1}},{path:"5",name:"page-5",component:Nb,meta:{slide:{raw:`
|
|||
|
## Définition
|
|||
|
### Multi-view Stereo
|
|||
|
|
|||
|
<img src="https://people.inf.ethz.ch/~moswald/publications/resources/Oswald-DA-2007.png" class="m-auto h-105"/>
|
|||
|
|
|||
|
<a href="https://people.inf.ethz.ch/~moswald/publications/resources/Oswald-DA-2007.pdf" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Concurrent Stereo Reconstruction, Martin R. Oswald, 2007</a>
|
|||
|
|
|||
|
<!--
|
|||
|
MVS -> reconstruction 3D à partir des positions des caméras et de leur image.
|
|||
|
On obtient un nuage de point dense
|
|||
|
|
|||
|
Avec la méthode classique, il peut y avoir des décalages entre les nuages de points
|
|||
|
Mais avec level set, on peut s'affranchir de ce problème
|
|||
|
-->
|
|||
|
`,title:"Définition",level:2,content:`## Définition
|
|||
|
### Multi-view Stereo
|
|||
|
|
|||
|
<img src="https://people.inf.ethz.ch/~moswald/publications/resources/Oswald-DA-2007.png" class="m-auto h-105"/>
|
|||
|
|
|||
|
<a href="https://people.inf.ethz.ch/~moswald/publications/resources/Oswald-DA-2007.pdf" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Concurrent Stereo Reconstruction, Martin R. Oswald, 2007</a>`,frontmatter:{},note:`MVS -> reconstruction 3D à partir des positions des caméras et de leur image.
|
|||
|
On obtient un nuage de point dense
|
|||
|
|
|||
|
Avec la méthode classique, il peut y avoir des décalages entre les nuages de points
|
|||
|
Mais avec level set, on peut s'affranchir de ce problème`,index:4,start:102,end:118,notesHTML:`<p>MVS -> reconstruction 3D à partir des positions des caméras et de leur image.
|
|||
|
On obtient un nuage de point dense</p>
|
|||
|
<p>Avec la méthode classique, il peut y avoir des décalages entre les nuages de points
|
|||
|
Mais avec level set, on peut s'affranchir de ce problème</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:4,no:5},__clicksElements:[],__preloaded:!1}},{path:"6",name:"page-6",component:zb,meta:{slide:{raw:`
|
|||
|
## L'idée générale
|
|||
|
### Évolution de $u$
|
|||
|
|
|||
|
<img src="/figs/lvl7_2D_1.png" class="m-auto h-100"/>
|
|||
|
|
|||
|
<a href="https://hal.inria.fr/inria-00073673/document" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998</a>
|
|||
|
|
|||
|
<!--
|
|||
|
Faugeras et Keriven ont écrit ce "livre" pour poser pleins de preuves mathématiques sur des problèmes variationnels... dont les levels sets.
|
|||
|
Et donc dans le leur "livre" ils montrent plusieurs exemples de levels sets.
|
|||
|
Ils montrent un procédé pour mettre à jour u (le contour bleu) pour que celui-ci converge vers un volume capturé (le contour rouge) par des caméras (dont les poses sont connues).
|
|||
|
-->
|
|||
|
`,title:"L'idée générale",level:2,content:`## L'idée générale
|
|||
|
### Évolution de $u$
|
|||
|
|
|||
|
<img src="/figs/lvl7_2D_1.png" class="m-auto h-100"/>
|
|||
|
|
|||
|
<a href="https://hal.inria.fr/inria-00073673/document" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998</a>`,frontmatter:{},note:`Faugeras et Keriven ont écrit ce "livre" pour poser pleins de preuves mathématiques sur des problèmes variationnels... dont les levels sets.
|
|||
|
Et donc dans le leur "livre" ils montrent plusieurs exemples de levels sets.
|
|||
|
Ils montrent un procédé pour mettre à jour u (le contour bleu) pour que celui-ci converge vers un volume capturé (le contour rouge) par des caméras (dont les poses sont connues).`,index:5,start:119,end:133,notesHTML:`<p>Faugeras et Keriven ont écrit ce "livre" pour poser pleins de preuves mathématiques sur des problèmes variationnels... dont les levels sets.
|
|||
|
Et donc dans le leur "livre" ils montrent plusieurs exemples de levels sets.
|
|||
|
Ils montrent un procédé pour mettre à jour u (le contour bleu) pour que celui-ci converge vers un volume capturé (le contour rouge) par des caméras (dont les poses sont connues).</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:5,no:6},__clicksElements:[],__preloaded:!1}},{path:"7",name:"page-7",component:Zb,meta:{slide:{raw:`
|
|||
|
## L'idée générale
|
|||
|
### Évolution de $u$
|
|||
|
|
|||
|
<img src="/figs/lvl7_2D_3.png" class="m-auto h-100"/>
|
|||
|
|
|||
|
<a href="https://hal.inria.fr/inria-00073673/document" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998</a>
|
|||
|
|
|||
|
<!--
|
|||
|
changement de topologie du level set
|
|||
|
-->
|
|||
|
`,title:"L'idée générale",level:2,content:`## L'idée générale
|
|||
|
### Évolution de $u$
|
|||
|
|
|||
|
<img src="/figs/lvl7_2D_3.png" class="m-auto h-100"/>
|
|||
|
|
|||
|
<a href="https://hal.inria.fr/inria-00073673/document" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Variational principles, surface evolution, PDEs, level set methods, and the stereo problem - Olivier Faugeras, Renaud Keriven, 1998</a>`,frontmatter:{},note:"changement de topologie du level set",index:6,start:134,end:146,notesHTML:`<p>changement de topologie du level set</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:6,no:7},__clicksElements:[],__preloaded:!1}},{path:"8",name:"page-8",component:ix,meta:{slide:{raw:`
|
|||
|
## Hypothèses
|
|||
|
### Discrétisation de l'espace
|
|||
|
|
|||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/b/bc/Voxels.svg" class="m-auto mr-50 -mt-13 h-100">
|
|||
|
|
|||
|
<div class="absolute top-25">
|
|||
|
|
|||
|
$\\mathbb{R}^3 \\to \\mathbb{V}$
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
### Binarisation du levelset
|
|||
|
|
|||
|
<div class="absolute bottom-3">
|
|||
|
|
|||
|
$\\mathcal{V} = \\{ \\textbf{v} = (x, y, z) \\in \\mathbb{V}, u(\\textbf{v}) > 0 \\}, \\quad u \\colon \\mathbb{V} \\to \\{0, 1\\}$
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<a href="https://en.wikipedia.org/wiki/Voxel" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Wikipedia</a>
|
|||
|
|
|||
|
<!--
|
|||
|
Dans un premier on va discrétiser notre espace, puisque qu'on travaille dans le monde numérique + les observations (photos caméras) que l'on va utiliser pour calculer notre levelset sont aussi des échantillons.
|
|||
|
On va donc travailler avec une grille de pixels si on est en 2D, et un grille de voxels (V) si on est en 3D.
|
|||
|
On va aussi simplifier le problème en binarisant notre fonction u, celle-ci désormais sort soit 0 (de l'air) ou 1 (du solide).
|
|||
|
Et donc t on va aussi le définir égal à 0.
|
|||
|
-->
|
|||
|
`,title:"Hypothèses",level:2,content:`## Hypothèses
|
|||
|
### Discrétisation de l'espace
|
|||
|
|
|||
|
<img src="https://upload.wikimedia.org/wikipedia/commons/b/bc/Voxels.svg" class="m-auto mr-50 -mt-13 h-100">
|
|||
|
|
|||
|
<div class="absolute top-25">
|
|||
|
|
|||
|
$\\mathbb{R}^3 \\to \\mathbb{V}$
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
### Binarisation du levelset
|
|||
|
|
|||
|
<div class="absolute bottom-3">
|
|||
|
|
|||
|
$\\mathcal{V} = \\{ \\textbf{v} = (x, y, z) \\in \\mathbb{V}, u(\\textbf{v}) > 0 \\}, \\quad u \\colon \\mathbb{V} \\to \\{0, 1\\}$
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
<a href="https://en.wikipedia.org/wiki/Voxel" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Wikipedia</a>`,frontmatter:{},note:`Dans un premier on va discrétiser notre espace, puisque qu'on travaille dans le monde numérique + les observations (photos caméras) que l'on va utiliser pour calculer notre levelset sont aussi des échantillons.
|
|||
|
On va donc travailler avec une grille de pixels si on est en 2D, et un grille de voxels (V) si on est en 3D.
|
|||
|
On va aussi simplifier le problème en binarisant notre fonction u, celle-ci désormais sort soit 0 (de l'air) ou 1 (du solide).
|
|||
|
Et donc t on va aussi le définir égal à 0.`,index:7,start:147,end:176,notesHTML:`<p>Dans un premier on va discrétiser notre espace, puisque qu'on travaille dans le monde numérique + les observations (photos caméras) que l'on va utiliser pour calculer notre levelset sont aussi des échantillons.
|
|||
|
On va donc travailler avec une grille de pixels si on est en 2D, et un grille de voxels (V) si on est en 3D.
|
|||
|
On va aussi simplifier le problème en binarisant notre fonction u, celle-ci désormais sort soit 0 (de l'air) ou 1 (du solide).
|
|||
|
Et donc t on va aussi le définir égal à 0.</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:7,no:8},__clicksElements:[],__preloaded:!1}},{path:"9",name:"page-9",component:dx,meta:{slide:{raw:`
|
|||
|
## L'algorithme
|
|||
|
### Initialisation du volume
|
|||
|
|
|||
|
- Définition des bornes de notre grille de voxels:
|
|||
|
- $x \\in \\llbracket x_{\\min}, x_{\\max} \\rrbracket$
|
|||
|
- $y \\in \\llbracket y_{\\min}, y_{\\max} \\rrbracket$
|
|||
|
- $z \\in \\llbracket z_{\\min}, z_{\\max} \\rrbracket$
|
|||
|
- Définition d'une résolution de voxel:
|
|||
|
- Pas trop grand, sinon un voxel projeté sur nos caméras comprends plusieurs pixels
|
|||
|
- Pas trop petit, sinon plusieurs voxels se projetent sur le même pixel
|
|||
|
- Exemple: $5.10^{-2}\\ m$
|
|||
|
- Initialisation des valeurs des voxels:
|
|||
|
- Uniforme: $\\forall \\textbf{Q} = (X, Y, Z) \\in \\mathbb{R}, u_0(\\textbf{Q}) = 1$
|
|||
|
- Shape From Silhouette <span style="opacity: 0.025;">BE4 CHEH</span>
|
|||
|
|
|||
|
<!--
|
|||
|
Parler init volume juste avant. \\
|
|||
|
Comme on l'a vu dans les exemple de Faugeras, il nous faut un u_0 initial (le contour bleu). Pour ça, dans notre cas, on va dans un premier temps définir des bornes à notre grille de voxels. Il faut aussi définir la taille des voxels.
|
|||
|
-->
|
|||
|
`,title:"L'algorithme",level:2,content:`## L'algorithme
|
|||
|
### Initialisation du volume
|
|||
|
|
|||
|
- Définition des bornes de notre grille de voxels:
|
|||
|
- $x \\in \\llbracket x_{\\min}, x_{\\max} \\rrbracket$
|
|||
|
- $y \\in \\llbracket y_{\\min}, y_{\\max} \\rrbracket$
|
|||
|
- $z \\in \\llbracket z_{\\min}, z_{\\max} \\rrbracket$
|
|||
|
- Définition d'une résolution de voxel:
|
|||
|
- Pas trop grand, sinon un voxel projeté sur nos caméras comprends plusieurs pixels
|
|||
|
- Pas trop petit, sinon plusieurs voxels se projetent sur le même pixel
|
|||
|
- Exemple: $5.10^{-2}\\ m$
|
|||
|
- Initialisation des valeurs des voxels:
|
|||
|
- Uniforme: $\\forall \\textbf{Q} = (X, Y, Z) \\in \\mathbb{R}, u_0(\\textbf{Q}) = 1$
|
|||
|
- Shape From Silhouette <span style="opacity: 0.025;">BE4 CHEH</span>`,frontmatter:{},note:`Parler init volume juste avant. \\
|
|||
|
Comme on l'a vu dans les exemple de Faugeras, il nous faut un u_0 initial (le contour bleu). Pour ça, dans notre cas, on va dans un premier temps définir des bornes à notre grille de voxels. Il faut aussi définir la taille des voxels.`,index:8,start:177,end:198,notesHTML:`<p>Parler init volume juste avant. <br>
|
|||
|
Comme on l'a vu dans les exemple de Faugeras, il nous faut un u_0 initial (le contour bleu). Pour ça, dans notre cas, on va dans un premier temps définir des bornes à notre grille de voxels. Il faut aussi définir la taille des voxels.</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:8,no:9},__clicksElements:[],__preloaded:!1}},{path:"10",name:"page-10",component:vx,meta:{slide:{raw:`
|
|||
|
## L'algorithme
|
|||
|
### Principe du Shape from Silhouette
|
|||
|
|
|||
|
<img src="https://www.researchgate.net/profile/Silvio-Savarese/publication/221625880/figure/fig1/AS:652956261158913@1532688312594/Shape-from-Silhouettes-The-silhouette-and-camera-location-for-each-view-forms-a-cone.png" class="m-auto h-105">
|
|||
|
|
|||
|
<a href="https://ieeexplore.ieee.org/document/1024034" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Implementation of a Shadow Carving System for Shape Capture, doi: 10.1109/TDPVT.2002.1024034</a>
|
|||
|
|
|||
|
<!--
|
|||
|
On suppose qu'on connait les poses de plusieurs caméras, ainsi que les masques de l'objet qu'elles capturent.
|
|||
|
On va prendre tous les voxels de notre grille et les projeter sur chacune de nos caméras.
|
|||
|
Si on voxel tombe à l'exterieur du masque d'au moins d'une caméra, on le supprime.
|
|||
|
Il en résulte l'enveloppe convexe de l'objet (nuage de points / voxels).
|
|||
|
Plus on a de caméra, meilleure sera la définition de l'enveloppe.
|
|||
|
-->
|
|||
|
`,title:"L'algorithme",level:2,content:`## L'algorithme
|
|||
|
### Principe du Shape from Silhouette
|
|||
|
|
|||
|
<img src="https://www.researchgate.net/profile/Silvio-Savarese/publication/221625880/figure/fig1/AS:652956261158913@1532688312594/Shape-from-Silhouettes-The-silhouette-and-camera-location-for-each-view-forms-a-cone.png" class="m-auto h-105">
|
|||
|
|
|||
|
<a href="https://ieeexplore.ieee.org/document/1024034" class="absolute bottom-0 font-extralight mb-1 mr-2 right-0 text-xs">Implementation of a Shadow Carving System for Shape Capture, doi: 10.1109/TDPVT.2002.1024034</a>`,frontmatter:{},note:`On suppose qu'on connait les poses de plusieurs caméras, ainsi que les masques de l'objet qu'elles capturent.
|
|||
|
On va prendre tous les voxels de notre grille et les projeter sur chacune de nos caméras.
|
|||
|
Si on voxel tombe à l'exterieur du masque d'au moins d'une caméra, on le supprime.
|
|||
|
Il en résulte l'enveloppe convexe de l'objet (nuage de points / voxels).
|
|||
|
Plus on a de caméra, meilleure sera la définition de l'enveloppe.`,index:9,start:199,end:215,notesHTML:`<p>On suppose qu'on connait les poses de plusieurs caméras, ainsi que les masques de l'objet qu'elles capturent.
|
|||
|
On va prendre tous les voxels de notre grille et les projeter sur chacune de nos caméras.
|
|||
|
Si on voxel tombe à l'exterieur du masque d'au moins d'une caméra, on le supprime.
|
|||
|
Il en résulte l'enveloppe convexe de l'objet (nuage de points / voxels).
|
|||
|
Plus on a de caméra, meilleure sera la définition de l'enveloppe.</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:9,no:10},__clicksElements:[],__preloaded:!1}},{path:"11",name:"page-11",component:wx,meta:{slide:{raw:`
|
|||
|
### Shape from Silhouette 3D
|
|||
|
|
|||
|
<div class="flex items-center">
|
|||
|
<img src="/figs/example3D.gif" class="m-auto h-100">
|
|||
|
<iframe frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="autoplay; fullscreen; xr-spatial-tracking" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share width="100%" height="100%" src="https://sketchfab.com/models/e5717ee34c9e481a817a34aeacd8a48e/embed?autostart=1" class="h-100"></iframe>
|
|||
|
</div>
|
|||
|
|
|||
|
<!--
|
|||
|
25 poses, torus avec briques, génération blender, masques parfait par render raytracing (cycles).
|
|||
|
|
|||
|
nuage de voxel. si nuage de points -> conversion en mesh possible grace aux marching cubes.
|
|||
|
-->
|
|||
|
`,title:"Shape from Silhouette 3D",level:3,content:`### Shape from Silhouette 3D
|
|||
|
|
|||
|
<div class="flex items-center">
|
|||
|
<img src="/figs/example3D.gif" class="m-auto h-100">
|
|||
|
<iframe frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="autoplay; fullscreen; xr-spatial-tracking" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share width="100%" height="100%" src="https://sketchfab.com/models/e5717ee34c9e481a817a34aeacd8a48e/embed?autostart=1" class="h-100"></iframe>
|
|||
|
</div>`,frontmatter:{},note:`25 poses, torus avec briques, génération blender, masques parfait par render raytracing (cycles).
|
|||
|
|
|||
|
nuage de voxel. si nuage de points -> conversion en mesh possible grace aux marching cubes.`,index:10,start:216,end:230,notesHTML:`<p>25 poses, torus avec briques, génération blender, masques parfait par render raytracing (cycles).</p>
|
|||
|
<p>nuage de voxel. si nuage de points -> conversion en mesh possible grace aux marching cubes.</p>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:10,no:11},__clicksElements:[],__preloaded:!1}},{path:"12",name:"page-12",component:Px,meta:{slide:{raw:`
|
|||
|
## L'algorithme
|
|||
|
### Lancer de rayon (Fast Voxel Intersect)
|
|||
|
|
|||
|
<div class="grid grid-cols-2 col-auto w-110 m-auto">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141883810914427/fvi2.png" class="m-auto h-55"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141884242931712/fvi4.png" class="m-auto h-55"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141884679147602/fvi6.png" class="m-auto h-55"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141885056622661/fvi8.png" class="m-auto h-55"/>
|
|||
|
</div>
|
|||
|
|
|||
|
<!--
|
|||
|
- Sélection des voxels sur la bordure du volume
|
|||
|
- Vérification de la visibilité du voxel par toutes les caméras
|
|||
|
- Récupération des couleurs visibles par les caméras
|
|||
|
- Si !consensus et air, !update -> air
|
|||
|
- Si consensus et air, update -> solide
|
|||
|
- Si !consensus et solide, update -> air
|
|||
|
- Si consensus et solide, !update -> solide
|
|||
|
-->
|
|||
|
`,title:"L'algorithme",level:2,content:`## L'algorithme
|
|||
|
### Lancer de rayon (Fast Voxel Intersect)
|
|||
|
|
|||
|
<div class="grid grid-cols-2 col-auto w-110 m-auto">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141883810914427/fvi2.png" class="m-auto h-55"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141884242931712/fvi4.png" class="m-auto h-55"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141884679147602/fvi6.png" class="m-auto h-55"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1068141885056622661/fvi8.png" class="m-auto h-55"/>
|
|||
|
</div>`,frontmatter:{},note:`- Sélection des voxels sur la bordure du volume
|
|||
|
- Vérification de la visibilité du voxel par toutes les caméras
|
|||
|
- Récupération des couleurs visibles par les caméras
|
|||
|
- Si !consensus et air, !update -> air
|
|||
|
- Si consensus et air, update -> solide
|
|||
|
- Si !consensus et solide, update -> air
|
|||
|
- Si consensus et solide, !update -> solide`,index:11,start:231,end:252,notesHTML:`<ul>
|
|||
|
<li>Sélection des voxels sur la bordure du volume</li>
|
|||
|
<li>Vérification de la visibilité du voxel par toutes les caméras</li>
|
|||
|
<li>Récupération des couleurs visibles par les caméras
|
|||
|
<ul>
|
|||
|
<li>Si !consensus et air, !update -> air</li>
|
|||
|
<li>Si consensus et air, update -> solide</li>
|
|||
|
<li>Si !consensus et solide, update -> air</li>
|
|||
|
<li>Si consensus et solide, !update -> solide</li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
`,filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:11,no:12},__clicksElements:[],__preloaded:!1}},{path:"13",name:"page-13",component:Rx,meta:{slide:{raw:`
|
|||
|
## Résultats
|
|||
|
### L'environnement
|
|||
|
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070291885823889408/peanut.png" class="m-auto h-110"/>
|
|||
|
`,title:"Résultats",level:2,content:`## Résultats
|
|||
|
### L'environnement
|
|||
|
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070291885823889408/peanut.png" class="m-auto h-110"/>`,frontmatter:{},index:12,start:253,end:259,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:12,no:13},__clicksElements:[],__preloaded:!1}},{path:"14",name:"page-14",component:Nx,meta:{slide:{raw:`
|
|||
|
## Résultats
|
|||
|
### Les données
|
|||
|
|
|||
|
<style>
|
|||
|
img.shadowy {
|
|||
|
box-shadow: 0 0px 6px rgb(0 0 0 / 30%);
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
<div class="flex items-center">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070293528288165930/peanut_cams.png" class="h-90"/>
|
|||
|
<div class="flex-col inline-flex gap-5">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292853282054225/Image0000.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292923322744903/Image0000.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292853495975988/Image0010.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292923549224980/Image0010.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292853764407306/Image0020.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292923754741770/Image0020.png" class="w-100 shadowy"/>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
`,title:"Résultats",level:2,content:`## Résultats
|
|||
|
### Les données
|
|||
|
|
|||
|
<style>
|
|||
|
img.shadowy {
|
|||
|
box-shadow: 0 0px 6px rgb(0 0 0 / 30%);
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
<div class="flex items-center">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070293528288165930/peanut_cams.png" class="h-90"/>
|
|||
|
<div class="flex-col inline-flex gap-5">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292853282054225/Image0000.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292923322744903/Image0000.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292853495975988/Image0010.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292923549224980/Image0010.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292853764407306/Image0020.png" class="w-100 shadowy"/>
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070292923754741770/Image0020.png" class="w-100 shadowy"/>
|
|||
|
</div>
|
|||
|
</div>`,frontmatter:{},index:13,start:260,end:282,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:13,no:14},__clicksElements:[],__preloaded:!1}},{path:"15",name:"page-15",component:Hx,meta:{slide:{raw:`
|
|||
|
## Résultats
|
|||
|
### L'initialisation (Shape from Silhouette)
|
|||
|
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070287482186383450/init.png" class="m-auto h-110">
|
|||
|
`,title:"Résultats",level:2,content:`## Résultats
|
|||
|
### L'initialisation (Shape from Silhouette)
|
|||
|
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070287482186383450/init.png" class="m-auto h-110">`,frontmatter:{},index:14,start:283,end:289,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:14,no:15},__clicksElements:[],__preloaded:!1}},{path:"16",name:"page-16",component:Wx,meta:{slide:{raw:`
|
|||
|
## Résultats
|
|||
|
### Bordures
|
|||
|
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070307308032233532/border.png" class="m-auto h-110">
|
|||
|
`,title:"Résultats",level:2,content:`## Résultats
|
|||
|
### Bordures
|
|||
|
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070307308032233532/border.png" class="m-auto h-110">`,frontmatter:{},index:15,start:290,end:296,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:15,no:16},__clicksElements:[],__preloaded:!1}},{path:"17",name:"page-17",component:Xx,meta:{slide:{raw:`
|
|||
|
## Résultats
|
|||
|
### Visibilité des voxels
|
|||
|
|
|||
|
<div class="h-100 flex items-center">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070312481894973460/ray.png" class="h-105 -ml-15 -mr-15">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070312482243104839/selected.png" class="h-105 -ml-15">
|
|||
|
</div>`,title:"Résultats",level:2,content:`## Résultats
|
|||
|
### Visibilité des voxels
|
|||
|
|
|||
|
<div class="h-100 flex items-center">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070312481894973460/ray.png" class="h-105 -ml-15 -mr-15">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070312482243104839/selected.png" class="h-105 -ml-15">
|
|||
|
</div>`,frontmatter:{},index:16,start:297,end:305,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:16,no:17},__clicksElements:[],__preloaded:!1}},{path:"18",name:"page-18",component:sw,meta:{slide:{raw:`
|
|||
|
## Résultats
|
|||
|
### Évolution du level set
|
|||
|
|
|||
|
<div class="h-100 flex items-center">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070319867946872912/evol7bis.gif" class="m-auto h-105">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070319868324360252/shape7bis.gif" class="m-auto h-105">
|
|||
|
</div>
|
|||
|
`,title:"Résultats",level:2,content:`## Résultats
|
|||
|
### Évolution du level set
|
|||
|
|
|||
|
<div class="h-100 flex items-center">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070319867946872912/evol7bis.gif" class="m-auto h-105">
|
|||
|
<img src="https://cdn.discordapp.com/attachments/953586522572066826/1070319868324360252/shape7bis.gif" class="m-auto h-105">
|
|||
|
</div>`,frontmatter:{},index:17,start:306,end:315,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:17,no:18},__clicksElements:[],__preloaded:!1}},{path:"19",name:"page-19",component:aw,meta:{slide:{raw:`
|
|||
|
## Conclusion
|
|||
|
|
|||
|
<div class="h-100 flex flex-col text-2xl justify-center">
|
|||
|
|
|||
|
### Ce que nous avons fait
|
|||
|
|
|||
|
- Réalisation du SfS en 2D/3D
|
|||
|
- Réalisation du MVS par level sets en 2D avec initialisation par SfS
|
|||
|
|
|||
|
<br>
|
|||
|
|
|||
|
### Axes d'amélioration soon™
|
|||
|
|
|||
|
- Résultat en 3D
|
|||
|
- $\\{0, 1\\} \\to [0, 1]$
|
|||
|
|
|||
|
</div>
|
|||
|
`,title:"Conclusion",level:2,content:`## Conclusion
|
|||
|
|
|||
|
<div class="h-100 flex flex-col text-2xl justify-center">
|
|||
|
|
|||
|
### Ce que nous avons fait
|
|||
|
|
|||
|
- Réalisation du SfS en 2D/3D
|
|||
|
- Réalisation du MVS par level sets en 2D avec initialisation par SfS
|
|||
|
|
|||
|
<br>
|
|||
|
|
|||
|
### Axes d'amélioration soon™
|
|||
|
|
|||
|
- Résultat en 3D
|
|||
|
- $\\{0, 1\\} \\to [0, 1]$
|
|||
|
|
|||
|
</div>`,frontmatter:{},index:18,start:316,end:335,notesHTML:"",filepath:"/tmp/projet-probleme-inverse-3D/docs/slides.md",id:18,no:19},__clicksElements:[],__preloaded:!1}},{path:"20",component:Xy,meta:{layout:"end"}}],Be=lw,vr=[{name:"play",path:"/",component:y1,children:[...Be]},{name:"print",path:"/print",component:Gy},{path:"",redirect:{path:"/1"}},{path:"/:pathMatch(.*)",redirect:{path:"/1"}}];vr.push({path:"/presenter/print",component:()=>Hn(()=>import("./PresenterPrint-c79f21f9.js"),["assets/PresenterPrint-c79f21f9.js","assets/NoteViewer-0b2b5e23.js","assets/index-85fbf1a9.js"])}),vr.push({name:"presenter",path:"/presenter/:no",component:()=>Hn(()=>import("./Presenter-9a703e2c.js"),["assets/Presenter-9a703e2c.js","assets/NoteViewer-0b2b5e23.js","assets/DrawingControls-43cafd8c.js","assets/index-85fbf1a9.js","assets/Presenter-907537bb.css"]),beforeEnter:e=>{if(!Ps.remote||Ps.remote===e.query.password)return!0;if(Ps.remote&&e.query.password===void 0){const t=prompt("Enter password");if(Ps.remote===t)return!0}return e.params.no?{path:`/${e.params.no}`}:{path:""}}}),vr.push({path:"/presenter",redirect:{path:"/presenter/1"}});const hn=Hg({history:Bh("/projet-probleme-inverse-3D/"),routes:vr});function cw(e,t,{mode:n="replace"}={}){return O({get(){const s=hn.currentRoute.value.query[e];return s==null?t??null:Array.isArray(s)?s.filter(Boolean):s},set(s){Mt(()=>{hn[y(n)]({query:{...hn.currentRoute.value.query,[e]:s}})})}})}const $u=J(0);Mt(()=>{hn.afterEach(async()=>{await Mt(),$u.value+=1})});const Bt=O(()=>hn.currentRoute.value),Ri=O(()=>Bt.value.query.print!==void 0),uw=O(()=>Bt.value.query.print==="clicks"),Ut=O(()=>Bt.value.query.embedded!==void 0),Pt=O(()=>Bt.value.path.startsWith("/presenter")),Eu=O(()=>Ri.value&&!uw.value),Yo=O(()=>Bt.value.query.password),dw=O(()=>!Pt.value&&(!Oe.remote||Yo.value===Oe.remote)),_l=cw("clicks","0"),ku=O(()=>Be.length-1),fw=O(()=>Bt.value.path),ze=O(()=>parseInt(fw.value.split(/\//g).slice(-1)[0])||1);O(()=>Ai(ze.value));const pt=O(()=>Be.find(e=>e.path===`${ze.value}`));O(()=>{var e,t,n;return(n=(t=(e=pt.value)==null?void 0:e.meta)==null?void 0:t.slide)==null?void 0:n.id});O(()=>{var e,t;return((t=(e=pt.value)==null?void 0:e.meta)==null?void 0:t.layout)||(ze.value===1?"cover":"default")});const po=O(()=>Be.find(e=>e.path===`${Math.min(Be.length,ze.value+1)}`)),pw=O(()=>{var e,t;return $u.value,((t=(e=pt.value)==null?void 0:e.meta)==null?void 0:t.__clicksElements)||[]}),qn=O({get(){if(Eu.value)return 99999;let e=+(_l.value||0);return isNaN(e)&&(e=0),e},set(e){_l.value=e.toString()}}),Rr=O(()=>{var e,t;return+(((t=(e=pt.value)==null?void 0:e.meta)==null?void 0:t.clicks)??pw.value.length)}),mw=O(()=>ze.value<Be.length-1||qn.value<Rr.value),hw=O(()=>ze.value>1||qn.value>0),gw=O(()=>Be.filter(e=>{var t,n;return(n=(t=e.meta)==null?void 0:t.slide)==null?void 0:n.title}).reduce((e,t)=>(Di(e,t),e),[])),vw=O(()=>Ti(gw.value,pt.value));O(()=>Li(vw.value));function Nn(){Rr.value<=qn.value?Ar():qn.value+=1}async function jn(){qn.value<=0?await Dr():qn.value-=1}function Ai(e){return Pt.value?`/presenter/${e}`:`/${e}`}function Ar(){const e=Math.min(Be.length,ze.value+1);return fs(e)}async function Dr(e=!0){const t=Math.max(1,ze.value-1);await fs(t),e&&Rr.value&&hn.replace({query:{...Bt.value.query,clicks:Rr.value}})}function fs(e,t){return hn.push({path:Ai(e),query:{...Bt.value.query,clicks:t}})}function _w(e){const t=J(0),{direction:n,distanceX:s,distanceY:r}=oh(e,{onSwipeStart(i){i.pointerType==="touch"&&(Us.value||(t.value=Ao()))},onSwipeEnd(i){if(i.pointerType!=="touch"||!t.value||Us.value)return;const a=Math.abs(s.value),l=Math.abs(r.value);a/window.innerWidth>.3||a>100?n.value===Yt.LEFT?Nn():jn():(l/window.innerHeight>.4||l>200)&&(n.value===Yt.DOWN?Dr():Ar())}})}async function yl(){const{saveAs:e}=await Hn(()=>import("./FileSaver.min-17c85779.js").then(t=>t.F),[]);e(Ac(Oe.download)?Oe.download:Oe.exportFilename?`${Oe.exportFilename}.pdf`:"/projet-probleme-inverse-3D/slidev-exported.pdf",`${Oe.title}.pdf`)}async function zw(e){var t,n;if(e==null){const s=(n=(t=pt.value)==null?void 0:t.meta)==
|