@wandelbots/wandelbots-js-react-components 6.2.0 → 6.3.0-pr.ci-nova-dev-instance.642.8f90013
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/3d.cjs +1 -1
- package/dist/3d.d.ts +3 -2
- package/dist/3d.js +17 -16
- package/dist/chunks/MotionGroupVisualizer-DshWR1wY.js +1653 -0
- package/dist/chunks/MotionGroupVisualizer-eD7yFEcF.cjs +1 -0
- package/dist/components/3d-viewport/JointLimitGizmo.d.ts +34 -0
- package/dist/components/3d-viewport/jointLimitFrames.d.ts +8 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +68 -67
- package/dist/themes/themeTypes.d.ts +1 -0
- package/package.json +2 -1
- package/dist/chunks/MotionGroupVisualizer-CEiRJk_l.js +0 -1423
- package/dist/chunks/MotionGroupVisualizer-rrhU4sYi.cjs +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const t=require("react/jsx-runtime"),b=require("three"),q=require("three-stdlib"),f=require("react"),_=require("./externalizeComponent-OO4jcrz5.cjs"),S=require("@react-three/drei"),ge=require("@mui/material/styles"),v=require("@mui/material/Box"),Z=require("@mui/material/Button"),ye=require("@mui/material/Card"),K=require("@mui/material/Divider"),z=require("@mui/material/Typography"),O=require("@react-three/fiber"),je=require("mobx-react-lite"),be=require("react-i18next"),L=require("./useSmoothedMotionState-VYxEIyfr.cjs"),w=require("@wandelbots/nova-js/v2"),te=require("react-error-boundary");function Me(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,s.get?s:{enumerable:!0,get:()=>e[n]})}}return r.default=e,Object.freeze(r)}const M=Me(b);function Re(e){switch(e.shape_type){case"convex_hull":return new q.ConvexGeometry(e.vertices.map(n=>new M.Vector3(n[0]/1e3,n[1]/1e3,n[2]/1e3)));case"box":return new M.BoxGeometry(e.size_x/1e3,e.size_y/1e3,e.size_z/1e3);case"sphere":return new M.SphereGeometry(e.radius/1e3);case"capsule":return new M.CapsuleGeometry(e.radius/1e3,e.cylinder_height/1e3);case"cylinder":return new M.CylinderGeometry(e.radius/1e3,e.radius/1e3,e.height/1e3);case"rectangle":return new M.BoxGeometry(e.size_x/1e3,e.size_y/1e3,0);default:return console.warn(`${e.shape_type} is not supported`),new M.BufferGeometry}}function we({name:e,collider:r,children:n}){var d,u;const s=((d=r.pose)==null?void 0:d.position)??[0,0,0],i=((u=r.pose)==null?void 0:u.orientation)??[0,0,0];return r.margin&&console.warn(`${e} margin is not supported`),t.jsx("mesh",{name:e,position:new M.Vector3(s[0],s[1],s[2]).divideScalar(1e3),rotation:new M.Euler(i[0],i[1],i[2],"XYZ"),geometry:Re(r.shape),children:n})}function Se({name:e,colliders:r,meshChildrenProvider:n,...s}){return t.jsx("group",{name:e,...s,children:Object.entries(r).map(([i,d])=>t.jsx(we,{name:i,collider:d,children:n(i,d)},i))})}function ve({scene:e,meshChildrenProvider:r}){const n=e.colliders;return t.jsx("group",{children:n&&t.jsx(Se,{meshChildrenProvider:r,colliders:n})})}function V(){return t.jsx(S.Environment,{frames:1,children:t.jsx(Te,{})})}const _e=[2,0,2,0,2,0,2,0];function Te({positions:e=_e}){return t.jsxs(t.Fragment,{children:[t.jsx(S.Lightformer,{intensity:5,"rotation-x":Math.PI/2,position:[0,5,-9],scale:[10,10,1]}),t.jsx("group",{rotation:[0,.5,0],children:t.jsx("group",{children:e.map((r,n)=>t.jsx(S.Lightformer,{form:"circle",intensity:5,rotation:[Math.PI/2,0,0],position:[r,4,n*4],scale:[3,1,1]},n))})}),t.jsx(S.Lightformer,{intensity:40,"rotation-y":Math.PI/2,position:[-5,1,-1],scale:[20,.1,1]}),t.jsx(S.Lightformer,{intensity:20,"rotation-y":-Math.PI,position:[-5,-2,-1],scale:[20,.1,1]}),t.jsx(S.Lightformer,{"rotation-y":Math.PI/2,position:[-5,-1,-1],scale:[20,.5,1],intensity:5}),t.jsx(S.Lightformer,{"rotation-y":-Math.PI/2,position:[10,1,0],scale:[20,1,1],intensity:10}),t.jsx(S.Lightformer,{form:"ring",color:"white",intensity:5,scale:10,position:[-15,4,-18],target:[0,0,0]})]})}const ee={attach:"material",color:"#009f4d",opacity:.2,depthTest:!1,depthWrite:!1,transparent:!0,polygonOffset:!0};function Le({safetyZones:e,dhParameters:r,...n}){const s=f.useMemo(()=>_.dhParametersToPlaneSize(r??[]),[r]),i=(u,o)=>{var y,x;if(!((y=o==null?void 0:o.pose)!=null&&y.position)||!((x=o==null?void 0:o.pose)!=null&&x.orientation))return null;const p=new M.Vector3(o.pose.position[0]/1e3,o.pose.position[1]/1e3,o.pose.position[2]/1e3),a=new M.Vector3(o.pose.orientation[0],o.pose.orientation[1],o.pose.orientation[2]);let m;const c=o.shape.shape_type==="plane"?{...ee,side:M.DoubleSide}:{...ee,side:M.FrontSide};switch(o.shape.shape_type){case"plane":m=t.jsx("planeGeometry",{args:[s,s]});break;case"sphere":{const h=(o==null?void 0:o.shape).radius/1e3;m=t.jsx("sphereGeometry",{args:[h]});break}case"capsule":{const h=(o==null?void 0:o.shape).radius/1e3,l=(o==null?void 0:o.shape).cylinder_height/1e3;m=t.jsx("capsuleGeometry",{args:[h,l]});break}case"convex_hull":{const h=(o==null?void 0:o.shape).vertices.map(j=>new M.Vector3(j[0]/1e3,j[1]/1e3,j[2]/1e3)),l=_.verticesToCoplanarity(h);if(l.isCoplanar&&l.normal){const g=new M.Vector3().addVectors(h[0],l.normal.multiplyScalar(1e-4));h.push(g)}try{m=t.jsx("primitive",{object:new q.ConvexGeometry(h),attach:"geometry"})}catch(j){return console.log("Error creating ConvexGeometry:",j),null}break}case"rectangular_capsule":{const h=o.shape,l=h.radius/1e3,j=h.sphere_center_distance_x/1e3,g=h.sphere_center_distance_y/1e3,R=l*2;m=t.jsx("primitive",{object:new q.RoundedBoxGeometry(j,g,R,2,l),attach:"geometry"});break}default:console.warn("Unsupported safety zone shape type:",o.shape.shape_type),m=null}return t.jsxs("mesh",{renderOrder:u,position:p,quaternion:_.orientationToQuaternion(a),children:[m,t.jsx("meshStandardMaterial",{...c,polygonOffsetFactor:-u})]},`safety-zone-${o.shape.shape_type}-${u}`)},d=f.useMemo(()=>Object.values(e??{}).map((u,o)=>i(o,u)),[e,s]);return t.jsx("group",{...n,children:d})}function ke({trajectory:e,...r}){const n=(e==null?void 0:e.map(s=>{if(s.position&&s.position.length>=3){const[i,d,u]=s.position;if(Number.isFinite(i)&&Number.isFinite(d)&&Number.isFinite(u))return new M.Vector3(i/1e3,u/1e3,-d/1e3)}return null}).filter(s=>s!==null))||[];return t.jsx("group",{...r,children:n.length>0&&t.jsx(S.Line,{points:n,lineWidth:3,polygonOffset:!0,polygonOffsetFactor:10,polygonOffsetUnits:10})})}const D=new Map;async function E(e,r){if(D.has(e))return D.get(e);const n=(async()=>{var u;const s=r||"",i=new w.Nova({instanceUrl:s}),d=i.api.motionGroupModels;(u=d.axios)!=null&&u.interceptors&&d.axios.interceptors.request.use(o=>{var p;return(p=o.url)!=null&&p.includes("/glb")&&(o.responseType="blob"),o});try{const o=await i.api.motionGroupModels.getMotionGroupGlbModel(e);return URL.createObjectURL(o)}catch(o){throw console.error("Failed to fetch model:",o),o}})();return D.set(e,n),n}function ne(e){function r(n){return n.children.length===0?[n]:[n,...n.children.flatMap(s=>r(s))]}return r(e).filter(n=>oe(n))}function re(e){return e.name.endsWith("_FLG")}function oe(e){return/_J[0-9]+$/.test(e.name)}function Ee(e,r){let n;function s(i){if(re(i)){if(n)throw Error(`Found multiple flange groups in robot model ${r}; first ${n.name} then ${i.name}. Only one _FLG group is allowed.`);n=i}oe(i),i.children.map(s)}if(s(e.scene),!n)throw Error(`No flange group found in robot model ${r}. Flange must be identified with a name ending in _FLG.`);return{gltf:e}}const se=f.forwardRef(function({rapidlyChangingMotionState:r,dhParameters:n,chainOffsetPosition:s,chainOffsetQuaternion:i,onRotationChanged:d,children:u},o){const p=f.useRef(null),a=f.useRef([]),m=f.useRef(r.joint_position.filter(g=>g!==void 0)),{invalidate:c}=O.useThree(),y=f.useRef(r);y.current=r;function x(g){p.current=g,g&&h()}function h(){p.current&&(a.current=ne(p.current),l(),c())}f.useImperativeHandle(o,()=>({recollectJoints:h}));function l(){const g=m.current;if(d)d(a.current,g);else for(const[R,k]of a.current.entries()){const P=n[R],N=P.theta||0,F=P.reverse_rotation_direction?-1:1;k.rotation.y=F*(g[R]||0)+N}}function j(g){m.current=g.joint_position.filter(R=>R!==void 0),l(),c()}return L.useAutorun(()=>{j(y.current)}),f.useEffect(()=>{j(r)},[r]),t.jsx("group",{ref:x,position:s,quaternion:i,children:u})}),Pe="line",Ce="mesh";function Ae({rapidlyChangingMotionState:e,dhParameters:r,...n}){const s=new b.Matrix4,i=f.useRef([]),d=f.useRef([]);f.useEffect(()=>{i.current=new Array(r.length).fill(null),d.current=new Array(r.length).fill(null)},[r.length]);function u(a,m){const c=new b.Vector3,y=new b.Quaternion,x=new b.Vector3;s.decompose(c,y,x);const h=c.clone(),l=new b.Matrix4().makeRotationY(a.theta+m*(a.reverse_rotation_direction?-1:1)).multiply(new b.Matrix4().makeTranslation(0,a.d/1e3,0)).multiply(new b.Matrix4().makeTranslation(a.a/1e3,0,0)).multiply(new b.Matrix4().makeRotationX(a.alpha));return s.multiply(l),s.decompose(c,y,x),{a:h,b:c}}function o(a,m,c,y){if(!r)return;const x=r[a];if(!x)return;const{a:h,b:l}=u(x,y);m.geometry.setPositions([h.toArray(),l.toArray()].flat()),c.position.set(l.x,l.y,l.z)}function p(a,m){s.identity();for(let c=0;c<Math.min(a.length,m.length);c++){const y=i.current[c],x=d.current[c];y&&x&&o(c,y,x,m[c])}}return t.jsx(se,{rapidlyChangingMotionState:e,dhParameters:r,onRotationChanged:p,children:t.jsxs("group",{...n,name:"Scene",children:[t.jsxs("mesh",{children:[t.jsx("sphereGeometry",{args:[.01,32,32]}),t.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]}),r==null?void 0:r.map((a,m)=>{const{a:c,b:y}=u(a,e.joint_position[m]??0),x=`dhrobot_J0${m}`;return t.jsxs("group",{name:x,children:[t.jsx(S.Line,{ref:h=>{i.current[m]=h},name:Pe,points:[c,y],color:"white",lineWidth:5}),t.jsxs("mesh",{ref:h=>{d.current[m]=h},name:Ce,position:y,children:[t.jsx("sphereGeometry",{args:[.01,32,32]}),t.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]},`mesh_${m}`)]},x)})]})})}const Ge=console.warn;function ie(){return f.useEffect(()=>{console.warn=e=>{e!=="Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"&&Ge(e)}},[]),null}function Ie(e){return e.type==="Mesh"}function Oe({url:e,flangeRef:r,postModelRender:n,...s}){const i=S.useGLTF(e),u=Ee(i,"robot.glb").gltf,o=f.useCallback(a=>{a&&n&&n()},[n]);function p(a){try{return Ie(a)?a.geometry?t.jsx("mesh",{name:a.name,geometry:a.geometry,material:a.material,position:a.position,rotation:a.rotation},a.uuid):t.jsx("group",{name:a.name,position:a.position,rotation:a.rotation},a.uuid):t.jsx("group",{name:a.name,position:a.position,rotation:a.rotation,ref:re(a)?r:void 0,children:a.children.map(p)},a.uuid)}catch(m){return console.warn("Error rendering node",a.name,m),null}}return t.jsx("group",{...s,dispose:null,ref:o,children:p(u.scene)})}function ae({modelURL:e,flangeRef:r,postModelRender:n,...s}){const[i,d]=f.useState(null);return f.useEffect(()=>{let u=!1;return(async()=>{try{const p=typeof e=="string"?e:await e;u||d(a=>a===p?a:p)}catch(p){console.error("Failed to resolve model URL:",p)}})(),()=>{u=!0}},[e]),i?t.jsx(Oe,{url:i,flangeRef:r,postModelRender:n,...s}):null}const ce=(e,r)=>{e.userData.isGhost||(e.traverse(n=>{if(n instanceof M.Mesh){n.material instanceof M.Material&&(n.material.colorWrite=!1);const s=n.clone(),i=n.clone();s.material=new M.MeshStandardMaterial({depthTest:!0,depthWrite:!0,colorWrite:!1,polygonOffset:!0,polygonOffsetFactor:-1,side:M.DoubleSide}),s.userData.isGhost=!0,i.material=new M.MeshStandardMaterial({color:r,opacity:.3,depthTest:!0,depthWrite:!1,transparent:!0,polygonOffset:!0,polygonOffsetFactor:-2,side:M.DoubleSide}),i.userData.isGhost=!0,n.parent&&(n.parent.add(s),n.parent.add(i))}}),e.userData.isGhost=!0)},ue=e=>{if(!e.userData.isGhost)return;const r=[];e.traverse(n=>{var s;n instanceof M.Mesh&&((s=n.userData)!=null&&s.isGhost?r.push(n):n.material instanceof M.Material&&(n.material.colorWrite=!0))}),r.forEach(n=>{n.parent&&n.parent.remove(n)}),e.userData.isGhost=!1},B=_.externalizeComponent(({rapidlyChangingMotionState:e,modelFromController:r,dhParameters:n,chainOffsetPosition:s,chainOffsetQuaternion:i,getModel:d=E,flangeRef:u,postModelRender:o,transparentColor:p,instanceUrl:a,...m})=>{const[c,y]=f.useState(null),x=f.useRef(null),h=f.useCallback(R=>{y(R)},[]),l=f.useCallback(()=>{var R;(R=x.current)==null||R.recollectJoints(),o==null||o()},[o]);f.useEffect(()=>{c&&(p?ce(c,p):ue(c))},[c,p]);const j=f.useMemo(()=>{const R=d(r,a);if(!R)throw new Error(`No model found for robot "${r}". Ensure the model is available or provide a custom getModel function.`);return R},[r,a,d]),g=t.jsx(Ae,{rapidlyChangingMotionState:e,dhParameters:n,...m});return t.jsxs(te.ErrorBoundary,{fallback:g,onError:R=>{console.warn(R)},children:[t.jsx(f.Suspense,{fallback:g,children:t.jsx("group",{ref:h,children:t.jsx(se,{ref:x,rapidlyChangingMotionState:e,dhParameters:n,chainOffsetPosition:s,chainOffsetQuaternion:i,children:t.jsx(ae,{modelURL:j,postModelRender:l,flangeRef:u,...m})})})}),t.jsx(ie,{})]})}),le=_.externalizeComponent(({rapidlyChangingMotionState:e,...r})=>{const n=L.useSmoothedMotionState(e);return t.jsx(B,{rapidlyChangingMotionState:n,...r})});function fe({connectedMotionGroup:e,getModel:r=E,flangeRef:n,transparentColor:s,postModelRender:i,...d}){if(!e.dhParameters)return null;const u=e.mountingPosition,o=e.mountingQuaternion;return t.jsx(le,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,modelFromController:e.modelFromController||"",dhParameters:e.dhParameters,getModel:r,flangeRef:n,transparentColor:s,postModelRender:i,chainOffsetPosition:u,chainOffsetQuaternion:o,...d})}const Fe=_.externalizeComponent(je.observer(({robotName:e,programState:r,safetyState:n,operationMode:s,driveToHomeEnabled:i=!1,onDriveToHomePress:d,onDriveToHomeRelease:u,connectedMotionGroup:o,robotComponent:p=fe,customContentComponent:a,className:m})=>{var $;const c=ge.useTheme(),{t:y}=be.useTranslation(),[x,h]=f.useState(!1),l=f.useRef(null),j=f.useRef(null),[g,R]=f.useState(!1),[k,P]=f.useState({width:400,height:600}),[N,F]=f.useState(0);f.useEffect(()=>{const I=()=>{if(j.current){const{offsetWidth:Y,offsetHeight:X}=j.current;R(Y>X),P({width:Y,height:X})}};I();const Q=new ResizeObserver(I);return j.current&&Q.observe(j.current),()=>{Q.disconnect()}},[]);const W=f.useCallback(()=>{F(I=>I+1)},[]),C=f.useCallback(()=>{!i||!d||(h(!0),d())},[i,d]),A=f.useCallback(()=>{!i||!u||(h(!1),u())},[i,u]),H=f.useCallback(()=>{x&&u&&(h(!1),u())},[x,u]),T=g?k.width<350:k.height<200,G=g?k.height<310:k.height<450;return t.jsx(ye,{ref:j,className:m,sx:{width:"100%",height:"100%",display:"flex",flexDirection:g?"row":"column",position:"relative",overflow:"hidden",minWidth:{xs:180,sm:220,md:250},minHeight:g?{xs:200,sm:240,md:260}:{xs:150,sm:180,md:220},border:`1px solid ${c.palette.divider}`,borderRadius:"18px",boxShadow:"none",backgroundColor:(($=c.palette.backgroundPaperElevation)==null?void 0:$[8])||"#292B3F",backgroundImage:"none"},children:g?t.jsxs(t.Fragment,{children:[t.jsx(v,{sx:{flex:"0 0 50%",position:"relative",height:"100%",minHeight:"100%",maxHeight:"100%",borderRadius:1,m:{xs:1.5,sm:2,md:3},mr:{xs:.75,sm:1,md:1.5},overflow:"hidden",display:T?"none":"block"},children:!T&&t.jsxs(O.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:c.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute",top:0,left:0},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[t.jsx(V,{}),t.jsx(S.Bounds,{fit:!0,observe:!0,margin:1,maxDuration:1,children:t.jsx(p,{connectedMotionGroup:o,postModelRender:W})})]})}),t.jsxs(v,{sx:{flex:"1",display:"flex",flexDirection:"column",justifyContent:"flex-start",width:T?"100%":"50%"},children:[t.jsxs(v,{sx:{p:{xs:1.5,sm:2,md:3},pb:{xs:1,sm:1.5,md:2},textAlign:"left"},children:[t.jsx(z,{variant:"h6",component:"h2",sx:{mb:1},children:e}),t.jsx(L.ProgramStateIndicator,{programState:r,safetyState:n,operationMode:s})]}),t.jsxs(v,{sx:{p:{xs:1.5,sm:2,md:3},pt:0,flex:"1",display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[!G&&a&&t.jsxs(v,{children:[t.jsx(a,{}),t.jsx(K,{sx:{mt:1,mb:0,borderColor:c.palette.divider,opacity:.5}})]}),t.jsx(v,{sx:{mt:!G&&a?"auto":0},children:t.jsx(v,{sx:{display:"flex",justifyContent:"flex-start",mt:{xs:1,sm:1.5,md:2},mb:{xs:.5,sm:.75,md:1}},children:t.jsx(Z,{ref:l,variant:"contained",color:"secondary",size:"small",disabled:!i,onMouseDown:C,onMouseUp:A,onMouseLeave:H,onTouchStart:C,onTouchEnd:A,sx:{textTransform:"none",px:1.5,py:.5},children:y("RobotCard.DriveToHome.bt")})})})]})]})]}):t.jsx(t.Fragment,{children:t.jsxs(v,{sx:{p:3,height:"100%",display:"flex",flexDirection:"column"},children:[t.jsxs(v,{children:[t.jsx(z,{variant:"h6",component:"h2",sx:{mb:1},children:e}),t.jsx(L.ProgramStateIndicator,{programState:r,safetyState:n,operationMode:s})]}),t.jsx(v,{sx:{flex:T?0:1,position:"relative",minHeight:T?0:{xs:120,sm:150,md:200},height:T?0:"auto",borderRadius:1,overflow:"hidden",display:T?"none":"block"},children:!T&&t.jsxs(O.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:c.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute"},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[t.jsx(V,{}),t.jsx(S.Bounds,{fit:!0,clip:!0,observe:!0,margin:1,maxDuration:1,children:t.jsx(p,{connectedMotionGroup:o,postModelRender:W})})]})}),t.jsxs(v,{children:[!G&&a&&t.jsxs(t.Fragment,{children:[t.jsx(a,{}),t.jsx(K,{sx:{mt:1,mb:0,borderColor:c.palette.divider,opacity:.5}})]}),t.jsx(v,{sx:{display:"flex",justifyContent:"flex-start",mt:!G&&a?{xs:1,sm:2,md:5}:{xs:.5,sm:1,md:2},mb:{xs:.5,sm:.75,md:1}},children:t.jsx(Z,{ref:l,variant:"contained",color:"secondary",size:"small",disabled:!i,onMouseDown:C,onMouseUp:A,onMouseLeave:H,onTouchStart:C,onTouchEnd:A,sx:{textTransform:"none",px:1.5,py:.5},children:y("RobotCard.DriveToHome.bt")})})]})]})})})})),De=Array(6).fill(2*Math.PI);function de({rapidlyChangingMotionState:e,dhParameters:r,chainOffsetPosition:n,chainOffsetQuaternion:s,onTranslationChanged:i,children:d}){const u=f.useRef([]),o=f.useRef(e.joint_position.filter(x=>x!==void 0)),{invalidate:p}=O.useThree(),a=f.useRef(e);a.current=e;function m(x){x&&(u.current=ne(x),c(),p())}function c(){const x=o.current;if(i)i(u.current,x);else for(const[h,l]of u.current.entries()){const g=r[h].reverse_rotation_direction?-1:1;l.position.y=g*(x[h]||0)/1e3}}function y(x){o.current=x.joint_position.filter(h=>h!==void 0),c(),p()}return L.useAutorun(()=>{y(a.current)}),t.jsx("group",{ref:m,position:n,quaternion:s,children:d})}function he({rapidlyChangingMotionState:e,dhParameters:r,...n}){const s=new b.Matrix4,i=f.useRef(null),d=f.useRef(null);function u(a){const m=new b.Matrix4;for(let h=0;h<r.length;h++){const l=r[h],j=a[h]??0,g=new b.Matrix4().makeRotationY(l.theta).multiply(new b.Matrix4().makeTranslation(l.a/1e3,(l.d+j*(l.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new b.Matrix4().makeRotationX(l.alpha));m.multiply(g)}const c=new b.Vector3,y=new b.Quaternion,x=new b.Vector3;return m.decompose(c,y,x),c}const o=u(e.joint_position);function p(a,m){s.identity();let c=new b.Vector3;for(let l=0;l<r.length;l++){const j=m[l]??0,g=r[l],R=new b.Matrix4().makeRotationY(g.theta).multiply(new b.Matrix4().makeTranslation(g.a/1e3,(g.d+j*(g.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new b.Matrix4().makeRotationX(g.alpha));s.multiply(R)}const y=new b.Vector3,x=new b.Quaternion,h=new b.Vector3;if(s.decompose(y,x,h),c=y,i.current&&i.current.position.set(c.x,c.y,c.z),d.current){const l=d.current.geometry;l!=null&&l.setPositions&&l.setPositions([0,0,0,c.x,c.y,c.z])}}return t.jsx(de,{rapidlyChangingMotionState:e,dhParameters:r,onTranslationChanged:p,children:t.jsxs("group",{...n,name:"Scene",children:[t.jsxs("mesh",{name:"Base",position:[0,0,0],children:[t.jsx("sphereGeometry",{args:[.02,32,32]}),t.jsx("meshStandardMaterial",{color:"green",depthTest:!0})]}),t.jsx(S.Line,{ref:d,points:[new b.Vector3(0,0,0),o],color:"White",lineWidth:5}),t.jsxs("mesh",{ref:i,name:"TCP",position:o,children:[t.jsx("sphereGeometry",{args:[.025,32,32]}),t.jsx("meshStandardMaterial",{color:"red",depthTest:!0})]})]})})}const J=_.externalizeComponent(({rapidlyChangingMotionState:e,modelFromController:r,dhParameters:n,chainOffsetPosition:s,chainOffsetQuaternion:i,getModel:d=E,flangeRef:u,postModelRender:o,transparentColor:p,instanceUrl:a,...m})=>{const[c,y]=f.useState(null),x=f.useCallback(l=>{y(l)},[]);f.useEffect(()=>{c&&(p?ce(c,p):ue(c))},[c,p]);const h=t.jsx(he,{rapidlyChangingMotionState:e,dhParameters:n,...m});return t.jsxs(te.ErrorBoundary,{fallback:h,onError:l=>{console.warn(l)},children:[t.jsx(f.Suspense,{fallback:h,children:t.jsx("group",{ref:x,children:t.jsx(de,{rapidlyChangingMotionState:e,dhParameters:n,chainOffsetPosition:s,chainOffsetQuaternion:i,children:t.jsx(ae,{modelURL:(()=>{const l=d(r,a);if(!l){const j=new Blob([],{type:"model/gltf-binary"}),g=new File([j],`${r}.glb`,{type:"model/gltf-binary"});return Promise.resolve(URL.createObjectURL(g))}return l})(),postModelRender:o,flangeRef:u,...m})})})}),t.jsx(ie,{})]})}),pe=_.externalizeComponent(({rapidlyChangingMotionState:e,...r})=>{const n=L.useSmoothedMotionState(e);return t.jsx(J,{rapidlyChangingMotionState:n,...r})});function qe({connectedMotionGroup:e,getModel:r=E,flangeRef:n,transparentColor:s,postModelRender:i,...d}){if(!e.dhParameters)return null;const u=e.mountingPosition,o=e.mountingQuaternion,p=e.modelFromController||"";return p&&r(p)?t.jsx(pe,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,modelFromController:p,dhParameters:e.dhParameters,getModel:r,flangeRef:n,transparentColor:s,postModelRender:i,chainOffsetPosition:u,chainOffsetQuaternion:o,...d}):t.jsx(he,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,dhParameters:e.dhParameters,chainOffsetPosition:u,chainOffsetQuaternion:o,...d})}const U={[w.Manufacturer.Abb]:[0,0,0,0,Math.PI/2,0,0],[w.Manufacturer.Fanuc]:[0,0,0,0,-Math.PI/2,0,0],[w.Manufacturer.Yaskawa]:[0,0,0,0,-Math.PI/2,0,0],[w.Manufacturer.Kuka]:[0,-Math.PI/2,Math.PI/2,0,Math.PI/2,0,0],[w.Manufacturer.Universalrobots]:[0,-Math.PI/2,-Math.PI/2,-Math.PI/2,Math.PI/2,-Math.PI/2,0],[w.Manufacturer.Staubli]:[0,-Math.PI/2,Math.PI/2,0,0,0,0]};function me(e){const[r]=e.split("_");switch(r){case"ABB":return w.Manufacturer.Abb;case"FANUC":return w.Manufacturer.Fanuc;case"YASKAWA":return w.Manufacturer.Yaskawa;case"KUKA":return w.Manufacturer.Kuka;case"UniversalRobots":return w.Manufacturer.Universalrobots;case"STAUBLI":return w.Manufacturer.Staubli;default:return null}}function Ve(e,r){const n=me(e);return n&&n in U?U[n]:r||null}const xe=_.externalizeComponent(e=>{const{inverseSolver:r,dhParameters:n,...s}=e,[i,d]=f.useState(w.JointTypeEnum.RevoluteJoint);f.useEffect(()=>{n.length&&d(n[0].type??w.JointTypeEnum.RevoluteJoint)},[n]);const u=f.useMemo(()=>r===null&&i===w.JointTypeEnum.RevoluteJoint,[r,i]),o=f.useMemo(()=>r===null&&i===w.JointTypeEnum.PrismaticJoint,[r,i]);return f.useMemo(()=>!!r,[r])||u?t.jsx(B,{dhParameters:n,...s}):o?t.jsx(J,{dhParameters:n,...s}):null}),Ue=_.externalizeComponent(e=>{const r=L.useSmoothedMotionState(e.rapidlyChangingMotionState);return t.jsx(xe,{...e,rapidlyChangingMotionState:r})});exports.CollisionSceneRenderer=ve;exports.LinearAxis=qe;exports.MANUFACTURER_HOME_CONFIGS=U;exports.MotionGroupVisualizer=Ue;exports.MotionGroupVisualizerExact=xe;exports.PresetEnvironment=V;exports.Robot=fe;exports.RobotCard=Fe;exports.SafetyZonesRenderer=Le;exports.SupportedLinearAxis=pe;exports.SupportedLinearAxisExact=J;exports.SupportedRobot=le;exports.SupportedRobotExact=B;exports.TrajectoryRenderer=ke;exports.defaultAxisConfig=De;exports.defaultGetModel=E;exports.extractManufacturer=me;exports.getDefaultHomeConfig=Ve;
|