urdf-loader 0.10.2 → 0.10.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"urdf-viewer-element.js","sources":["../src/urdf-viewer-element.js"],"sourcesContent":["import * as THREE from 'three';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\nimport URDFLoader from './URDFLoader.js';\n\nconst tempVec2 = new THREE.Vector2();\n\n// urdf-viewer element\n// Loads and displays a 3D view of a URDF-formatted robot\n\n// Events\n// urdf-change: Fires when the URDF has finished loading and getting processed\n// urdf-processed: Fires when the URDF has finished loading and getting processed\n// geometry-loaded: Fires when all the geometry has been fully loaded\n// ignore-limits-change: Fires when the 'ignore-limits' attribute changes\n// angle-change: Fires when an angle changes\nexport default\nclass URDFViewer extends HTMLElement {\n\n static get observedAttributes() {\n\n return ['package', 'urdf', 'up', 'display-shadow', 'ambient-color', 'ignore-limits'];\n\n }\n\n get package() { return this.getAttribute('package') || ''; }\n set package(val) { this.setAttribute('package', val); }\n\n get urdf() { return this.getAttribute('urdf') || ''; }\n set urdf(val) { this.setAttribute('urdf', val); }\n\n get ignoreLimits() { return this.hasAttribute('ignore-limits') || false; }\n set ignoreLimits(val) { val ? this.setAttribute('ignore-limits', val) : this.removeAttribute('ignore-limits'); }\n\n get up() { return this.getAttribute('up') || '+Z'; }\n set up(val) { this.setAttribute('up', val); }\n\n get displayShadow() { return this.hasAttribute('display-shadow') || false; }\n set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }\n\n get ambientColor() { return this.getAttribute('ambient-color') || '#455A64'; }\n set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }\n\n get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }\n set autoRedraw(val) { val ? this.setAttribute('auto-redraw', true) : this.removeAttribute('auto-redraw'); }\n\n get noAutoRecenter() { return this.hasAttribute('no-auto-recenter') || false; }\n set noAutoRecenter(val) { val ? this.setAttribute('no-auto-recenter', true) : this.removeAttribute('no-auto-recenter'); }\n\n get jointValues() {\n\n const values = {};\n if (this.robot) {\n\n for (const name in this.robot.joints) {\n\n const joint = this.robot.joints[name];\n values[name] = joint.jointValue.length === 1 ? joint.angle : [...joint.jointValue];\n\n }\n\n }\n\n return values;\n\n }\n set jointValues(val) { this.setJointValues(val); }\n\n get angles() {\n\n return this.jointValues;\n\n }\n set angles(v) {\n\n this.jointValues = v;\n\n }\n\n /* Lifecycle Functions */\n constructor() {\n\n super();\n\n this._requestId = 0;\n this._dirty = false;\n this._loadScheduled = false;\n this.robot = null;\n this.loadMeshFunc = null;\n this.urlModifierFunc = null;\n\n // Scene setup\n const scene = new THREE.Scene();\n\n const ambientLight = new THREE.HemisphereLight(this.ambientColor, '#000');\n ambientLight.groundColor.lerp(ambientLight.color, 0.5);\n ambientLight.intensity = 0.5;\n ambientLight.position.set(0, 1, 0);\n scene.add(ambientLight);\n\n // Light setup\n const dirLight = new THREE.DirectionalLight(0xffffff);\n dirLight.position.set(4, 10, 1);\n dirLight.shadow.mapSize.width = 2048;\n dirLight.shadow.mapSize.height = 2048;\n dirLight.shadow.normalBias = 0.001;\n dirLight.castShadow = true;\n scene.add(dirLight);\n scene.add(dirLight.target);\n\n // Renderer setup\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setClearColor(0xffffff);\n renderer.setClearAlpha(0);\n renderer.shadowMap.enabled = true;\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\n renderer.outputEncoding = THREE.sRGBEncoding;\n\n // Camera setup\n const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);\n camera.position.z = -10;\n\n // World setup\n const world = new THREE.Object3D();\n scene.add(world);\n\n const plane = new THREE.Mesh(\n new THREE.PlaneBufferGeometry(40, 40),\n new THREE.ShadowMaterial({ side: THREE.DoubleSide, transparent: true, opacity: 0.5 }),\n );\n plane.rotation.x = -Math.PI / 2;\n plane.position.y = -0.5;\n plane.receiveShadow = true;\n plane.scale.set(10, 10, 10);\n scene.add(plane);\n\n // Controls setup\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.rotateSpeed = 2.0;\n controls.zoomSpeed = 5;\n controls.panSpeed = 2;\n controls.enableZoom = true;\n controls.enableDamping = false;\n controls.maxDistance = 50;\n controls.minDistance = 0.25;\n controls.addEventListener('change', () => this.recenter());\n\n this.scene = scene;\n this.world = world;\n this.renderer = renderer;\n this.camera = camera;\n this.controls = controls;\n this.plane = plane;\n this.directionalLight = dirLight;\n this.ambientLight = ambientLight;\n\n this._setUp(this.up);\n\n const _renderLoop = () => {\n\n if (this.parentNode) {\n\n this.updateSize();\n\n if (this._dirty || this.autoRedraw) {\n\n if (!this.noAutoRecenter) {\n\n this._updateEnvironment();\n }\n\n this.renderer.render(scene, camera);\n this._dirty = false;\n\n }\n\n // update controls after the environment in\n // case the controls are retargeted\n this.controls.update();\n\n }\n this._renderLoopId = requestAnimationFrame(_renderLoop);\n\n };\n _renderLoop();\n\n }\n\n connectedCallback() {\n\n // Add our initialize styles for the element if they haven't\n // been added yet\n if (!this.constructor._styletag) {\n\n const styletag = document.createElement('style');\n styletag.innerHTML =\n `\n ${ this.tagName } { display: block; }\n ${ this.tagName } canvas {\n width: 100%;\n height: 100%;\n }\n `;\n document.head.appendChild(styletag);\n this.constructor._styletag = styletag;\n\n }\n\n // add the renderer\n if (this.childElementCount === 0) {\n\n this.appendChild(this.renderer.domElement);\n\n }\n\n this.updateSize();\n requestAnimationFrame(() => this.updateSize());\n\n }\n\n disconnectedCallback() {\n\n cancelAnimationFrame(this._renderLoopId);\n\n }\n\n attributeChangedCallback(attr, oldval, newval) {\n\n this.recenter();\n\n switch (attr) {\n\n case 'package':\n case 'urdf': {\n\n this._scheduleLoad();\n break;\n\n }\n\n case 'up': {\n\n this._setUp(this.up);\n break;\n\n }\n\n case 'ambient-color': {\n\n this.ambientLight.color.set(this.ambientColor);\n this.ambientLight.groundColor.set('#000').lerp(this.ambientLight.color, 0.5);\n break;\n\n }\n\n case 'ignore-limits': {\n\n this._setIgnoreLimits(this.ignoreLimits, true);\n break;\n\n }\n\n }\n\n }\n\n /* Public API */\n updateSize() {\n\n const r = this.renderer;\n const w = this.clientWidth;\n const h = this.clientHeight;\n const currsize = r.getSize(tempVec2);\n\n if (currsize.width !== w || currsize.height !== h) {\n\n this.recenter();\n\n }\n\n r.setPixelRatio(window.devicePixelRatio);\n r.setSize(w, h, false);\n\n this.camera.aspect = w / h;\n this.camera.updateProjectionMatrix();\n\n }\n\n redraw() {\n\n this._dirty = true;\n }\n\n recenter() {\n\n this._updateEnvironment();\n this.redraw();\n\n }\n\n // Set the joint with jointName to\n // angle in degrees\n setJointValue(jointName, ...values) {\n\n if (!this.robot) return;\n if (!this.robot.joints[jointName]) return;\n\n if (this.robot.joints[jointName].setJointValue(...values)) {\n\n this.redraw();\n this.dispatchEvent(new CustomEvent('angle-change', { bubbles: true, cancelable: true, detail: jointName }));\n\n }\n\n }\n\n setJointValues(values) {\n\n for (const name in values) this.setJointValue(name, values[name]);\n\n }\n\n /* Private Functions */\n // Updates the position of the plane to be at the\n // lowest point below the robot and focuses the\n // camera on the center of the scene\n _updateEnvironment() {\n\n if (!this.robot) return;\n\n this.world.updateMatrixWorld();\n\n const bbox = new THREE.Box3();\n bbox.setFromObject(this.robot);\n\n const center = bbox.getCenter(new THREE.Vector3());\n this.controls.target.y = center.y;\n this.plane.position.y = bbox.min.y - 1e-3;\n\n const dirLight = this.directionalLight;\n dirLight.castShadow = this.displayShadow;\n\n if (this.displayShadow) {\n\n // Update the shadow camera rendering bounds to encapsulate the\n // model. We use the bounding sphere of the bounding box for\n // simplicity -- this could be a tighter fit.\n const sphere = bbox.getBoundingSphere(new THREE.Sphere());\n const minmax = sphere.radius;\n const cam = dirLight.shadow.camera;\n cam.left = cam.bottom = -minmax;\n cam.right = cam.top = minmax;\n\n // Update the camera to focus on the center of the model so the\n // shadow can encapsulate it\n const offset = dirLight.position.clone().sub(dirLight.target.position);\n dirLight.target.position.copy(center);\n dirLight.position.copy(center).add(offset);\n\n cam.updateProjectionMatrix();\n\n }\n\n }\n\n _scheduleLoad() {\n\n // if our current model is already what's being requested\n // or has been loaded then early out\n if (this._prevload === `${ this.package }|${ this.urdf }`) return;\n this._prevload = `${ this.package }|${ this.urdf }`;\n\n // if we're already waiting on a load then early out\n if (this._loadScheduled) return;\n this._loadScheduled = true;\n\n if (this.robot) {\n\n this.robot.traverse(c => c.dispose && c.dispose());\n this.robot.parent.remove(this.robot);\n this.robot = null;\n\n }\n\n requestAnimationFrame(() => {\n\n this._loadUrdf(this.package, this.urdf);\n this._loadScheduled = false;\n\n });\n\n }\n\n // Watch the package and urdf field and load the robot model.\n // This should _only_ be called from _scheduleLoad because that\n // ensures the that current robot has been removed\n _loadUrdf(pkg, urdf) {\n\n this.dispatchEvent(new CustomEvent('urdf-change', { bubbles: true, cancelable: true, composed: true }));\n\n if (urdf) {\n\n // Keep track of this request and make\n // sure it doesn't get overwritten by\n // a subsequent one\n this._requestId++;\n const requestId = this._requestId;\n\n const updateMaterials = mesh => {\n\n mesh.traverse(c => {\n\n if (c.isMesh) {\n\n c.castShadow = true;\n c.receiveShadow = true;\n\n if (c.material) {\n\n const mats =\n (Array.isArray(c.material) ? c.material : [c.material])\n .map(m => {\n\n if (m instanceof THREE.MeshBasicMaterial) {\n\n m = new THREE.MeshPhongMaterial();\n\n }\n\n if (m.map) {\n\n m.map.encoding = THREE.GammaEncoding;\n\n }\n\n return m;\n\n });\n c.material = mats.length === 1 ? mats[0] : mats;\n\n }\n\n }\n\n });\n\n };\n\n if (pkg.includes(':') && (pkg.split(':')[1].substring(0, 2)) !== '//') {\n // E.g. pkg = \"pkg_name: path/to/pkg_name, pk2: path2/to/pk2\"}\n\n // Convert pkg(s) into a map. E.g.\n // { \"pkg_name\": \"path/to/pkg_name\",\n // \"pk2\": \"path2/to/pk2\" }\n\n pkg = pkg.split(',').reduce((map, value) => {\n\n const split = value.split(/:/).filter(x => !!x);\n const pkgName = split.shift().trim();\n const pkgPath = split.join(':').trim();\n map[pkgName] = pkgPath;\n\n return map;\n\n }, {});\n }\n\n let robot = null;\n const manager = new THREE.LoadingManager();\n manager.onLoad = () => {\n\n // If another request has come in to load a new\n // robot, then ignore this one\n if (this._requestId !== requestId) {\n\n robot.traverse(c => c.dispose && c.dispose());\n return;\n\n }\n\n this.robot = robot;\n this.world.add(robot);\n updateMaterials(robot);\n\n this._setIgnoreLimits(this.ignoreLimits);\n\n this.dispatchEvent(new CustomEvent('urdf-processed', { bubbles: true, cancelable: true, composed: true }));\n this.dispatchEvent(new CustomEvent('geometry-loaded', { bubbles: true, cancelable: true, composed: true }));\n\n this.recenter();\n\n };\n\n if (this.urlModifierFunc) {\n\n manager.setURLModifier(this.urlModifierFunc);\n\n }\n\n const loader = new URDFLoader(manager);\n loader.packages = pkg;\n loader.loadMeshCb = this.loadMeshFunc;\n loader.fetchOptions = { mode: 'cors', credentials: 'same-origin' };\n loader.load(urdf, model => robot = model);\n\n }\n\n }\n\n // Watch the coordinate frame and update the\n // rotation of the scene to match\n _setUp(up) {\n\n if (!up) up = '+Z';\n up = up.toUpperCase();\n const sign = up.replace(/[^-+]/g, '')[0] || '+';\n const axis = up.replace(/[^XYZ]/gi, '')[0] || 'Z';\n\n const PI = Math.PI;\n const HALFPI = PI / 2;\n if (axis === 'X') this.world.rotation.set(0, 0, sign === '+' ? HALFPI : -HALFPI);\n if (axis === 'Z') this.world.rotation.set(sign === '+' ? -HALFPI : HALFPI, 0, 0);\n if (axis === 'Y') this.world.rotation.set(sign === '+' ? 0 : PI, 0, 0);\n\n }\n\n // Updates the current robot's angles to ignore\n // joint limits or not\n _setIgnoreLimits(ignore, dispatch = false) {\n\n if (this.robot) {\n\n Object\n .values(this.robot.joints)\n .forEach(joint => {\n\n joint.ignoreLimits = ignore;\n joint.setJointValue(...joint.jointValue);\n\n });\n\n }\n\n if (dispatch) {\n\n this.dispatchEvent(new CustomEvent('ignore-limits-change', { bubbles: true, cancelable: true, composed: true }));\n\n }\n\n }\n\n};\n"],"names":["THREE.Vector2","THREE.Scene","THREE.HemisphereLight","THREE.DirectionalLight","THREE.WebGLRenderer","THREE.PCFSoftShadowMap","THREE.sRGBEncoding","THREE.PerspectiveCamera","THREE.Object3D","THREE.Mesh","THREE.PlaneBufferGeometry","THREE.ShadowMaterial","THREE.DoubleSide","OrbitControls","THREE.Box3","THREE.Vector3","THREE.Sphere","THREE.MeshBasicMaterial","THREE.MeshPhongMaterial","THREE.GammaEncoding","THREE.LoadingManager","URDFLoader"],"mappings":"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"}
1
+ {"version":3,"file":"urdf-viewer-element.js","sources":["../src/urdf-viewer-element.js"],"sourcesContent":["import * as THREE from 'three';\r\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';\r\nimport URDFLoader from './URDFLoader.js';\r\n\r\nconst tempVec2 = new THREE.Vector2();\r\n\r\n// urdf-viewer element\r\n// Loads and displays a 3D view of a URDF-formatted robot\r\n\r\n// Events\r\n// urdf-change: Fires when the URDF has finished loading and getting processed\r\n// urdf-processed: Fires when the URDF has finished loading and getting processed\r\n// geometry-loaded: Fires when all the geometry has been fully loaded\r\n// ignore-limits-change: Fires when the 'ignore-limits' attribute changes\r\n// angle-change: Fires when an angle changes\r\nexport default\r\nclass URDFViewer extends HTMLElement {\r\n\r\n static get observedAttributes() {\r\n\r\n return ['package', 'urdf', 'up', 'display-shadow', 'ambient-color', 'ignore-limits'];\r\n\r\n }\r\n\r\n get package() { return this.getAttribute('package') || ''; }\r\n set package(val) { this.setAttribute('package', val); }\r\n\r\n get urdf() { return this.getAttribute('urdf') || ''; }\r\n set urdf(val) { this.setAttribute('urdf', val); }\r\n\r\n get ignoreLimits() { return this.hasAttribute('ignore-limits') || false; }\r\n set ignoreLimits(val) { val ? this.setAttribute('ignore-limits', val) : this.removeAttribute('ignore-limits'); }\r\n\r\n get up() { return this.getAttribute('up') || '+Z'; }\r\n set up(val) { this.setAttribute('up', val); }\r\n\r\n get displayShadow() { return this.hasAttribute('display-shadow') || false; }\r\n set displayShadow(val) { val ? this.setAttribute('display-shadow', '') : this.removeAttribute('display-shadow'); }\r\n\r\n get ambientColor() { return this.getAttribute('ambient-color') || '#455A64'; }\r\n set ambientColor(val) { val ? this.setAttribute('ambient-color', val) : this.removeAttribute('ambient-color'); }\r\n\r\n get autoRedraw() { return this.hasAttribute('auto-redraw') || false; }\r\n set autoRedraw(val) { val ? this.setAttribute('auto-redraw', true) : this.removeAttribute('auto-redraw'); }\r\n\r\n get noAutoRecenter() { return this.hasAttribute('no-auto-recenter') || false; }\r\n set noAutoRecenter(val) { val ? this.setAttribute('no-auto-recenter', true) : this.removeAttribute('no-auto-recenter'); }\r\n\r\n get jointValues() {\r\n\r\n const values = {};\r\n if (this.robot) {\r\n\r\n for (const name in this.robot.joints) {\r\n\r\n const joint = this.robot.joints[name];\r\n values[name] = joint.jointValue.length === 1 ? joint.angle : [...joint.jointValue];\r\n\r\n }\r\n\r\n }\r\n\r\n return values;\r\n\r\n }\r\n set jointValues(val) { this.setJointValues(val); }\r\n\r\n get angles() {\r\n\r\n return this.jointValues;\r\n\r\n }\r\n set angles(v) {\r\n\r\n this.jointValues = v;\r\n\r\n }\r\n\r\n /* Lifecycle Functions */\r\n constructor() {\r\n\r\n super();\r\n\r\n this._requestId = 0;\r\n this._dirty = false;\r\n this._loadScheduled = false;\r\n this.robot = null;\r\n this.loadMeshFunc = null;\r\n this.urlModifierFunc = null;\r\n\r\n // Scene setup\r\n const scene = new THREE.Scene();\r\n\r\n const ambientLight = new THREE.HemisphereLight(this.ambientColor, '#000');\r\n ambientLight.groundColor.lerp(ambientLight.color, 0.5);\r\n ambientLight.intensity = 0.5;\r\n ambientLight.position.set(0, 1, 0);\r\n scene.add(ambientLight);\r\n\r\n // Light setup\r\n const dirLight = new THREE.DirectionalLight(0xffffff);\r\n dirLight.position.set(4, 10, 1);\r\n dirLight.shadow.mapSize.width = 2048;\r\n dirLight.shadow.mapSize.height = 2048;\r\n dirLight.shadow.normalBias = 0.001;\r\n dirLight.castShadow = true;\r\n scene.add(dirLight);\r\n scene.add(dirLight.target);\r\n\r\n // Renderer setup\r\n const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\r\n renderer.setClearColor(0xffffff);\r\n renderer.setClearAlpha(0);\r\n renderer.shadowMap.enabled = true;\r\n renderer.shadowMap.type = THREE.PCFSoftShadowMap;\r\n renderer.outputEncoding = THREE.sRGBEncoding;\r\n\r\n // Camera setup\r\n const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);\r\n camera.position.z = -10;\r\n\r\n // World setup\r\n const world = new THREE.Object3D();\r\n scene.add(world);\r\n\r\n const plane = new THREE.Mesh(\r\n new THREE.PlaneBufferGeometry(40, 40),\r\n new THREE.ShadowMaterial({ side: THREE.DoubleSide, transparent: true, opacity: 0.5 }),\r\n );\r\n plane.rotation.x = -Math.PI / 2;\r\n plane.position.y = -0.5;\r\n plane.receiveShadow = true;\r\n plane.scale.set(10, 10, 10);\r\n scene.add(plane);\r\n\r\n // Controls setup\r\n const controls = new OrbitControls(camera, renderer.domElement);\r\n controls.rotateSpeed = 2.0;\r\n controls.zoomSpeed = 5;\r\n controls.panSpeed = 2;\r\n controls.enableZoom = true;\r\n controls.enableDamping = false;\r\n controls.maxDistance = 50;\r\n controls.minDistance = 0.25;\r\n controls.addEventListener('change', () => this.recenter());\r\n\r\n this.scene = scene;\r\n this.world = world;\r\n this.renderer = renderer;\r\n this.camera = camera;\r\n this.controls = controls;\r\n this.plane = plane;\r\n this.directionalLight = dirLight;\r\n this.ambientLight = ambientLight;\r\n\r\n this._setUp(this.up);\r\n\r\n const _renderLoop = () => {\r\n\r\n if (this.parentNode) {\r\n\r\n this.updateSize();\r\n\r\n if (this._dirty || this.autoRedraw) {\r\n\r\n if (!this.noAutoRecenter) {\r\n\r\n this._updateEnvironment();\r\n }\r\n\r\n this.renderer.render(scene, camera);\r\n this._dirty = false;\r\n\r\n }\r\n\r\n // update controls after the environment in\r\n // case the controls are retargeted\r\n this.controls.update();\r\n\r\n }\r\n this._renderLoopId = requestAnimationFrame(_renderLoop);\r\n\r\n };\r\n _renderLoop();\r\n\r\n }\r\n\r\n connectedCallback() {\r\n\r\n // Add our initialize styles for the element if they haven't\r\n // been added yet\r\n if (!this.constructor._styletag) {\r\n\r\n const styletag = document.createElement('style');\r\n styletag.innerHTML =\r\n `\r\n ${ this.tagName } { display: block; }\r\n ${ this.tagName } canvas {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n `;\r\n document.head.appendChild(styletag);\r\n this.constructor._styletag = styletag;\r\n\r\n }\r\n\r\n // add the renderer\r\n if (this.childElementCount === 0) {\r\n\r\n this.appendChild(this.renderer.domElement);\r\n\r\n }\r\n\r\n this.updateSize();\r\n requestAnimationFrame(() => this.updateSize());\r\n\r\n }\r\n\r\n disconnectedCallback() {\r\n\r\n cancelAnimationFrame(this._renderLoopId);\r\n\r\n }\r\n\r\n attributeChangedCallback(attr, oldval, newval) {\r\n\r\n this.recenter();\r\n\r\n switch (attr) {\r\n\r\n case 'package':\r\n case 'urdf': {\r\n\r\n this._scheduleLoad();\r\n break;\r\n\r\n }\r\n\r\n case 'up': {\r\n\r\n this._setUp(this.up);\r\n break;\r\n\r\n }\r\n\r\n case 'ambient-color': {\r\n\r\n this.ambientLight.color.set(this.ambientColor);\r\n this.ambientLight.groundColor.set('#000').lerp(this.ambientLight.color, 0.5);\r\n break;\r\n\r\n }\r\n\r\n case 'ignore-limits': {\r\n\r\n this._setIgnoreLimits(this.ignoreLimits, true);\r\n break;\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n /* Public API */\r\n updateSize() {\r\n\r\n const r = this.renderer;\r\n const w = this.clientWidth;\r\n const h = this.clientHeight;\r\n const currsize = r.getSize(tempVec2);\r\n\r\n if (currsize.width !== w || currsize.height !== h) {\r\n\r\n this.recenter();\r\n\r\n }\r\n\r\n r.setPixelRatio(window.devicePixelRatio);\r\n r.setSize(w, h, false);\r\n\r\n this.camera.aspect = w / h;\r\n this.camera.updateProjectionMatrix();\r\n\r\n }\r\n\r\n redraw() {\r\n\r\n this._dirty = true;\r\n }\r\n\r\n recenter() {\r\n\r\n this._updateEnvironment();\r\n this.redraw();\r\n\r\n }\r\n\r\n // Set the joint with jointName to\r\n // angle in degrees\r\n setJointValue(jointName, ...values) {\r\n\r\n if (!this.robot) return;\r\n if (!this.robot.joints[jointName]) return;\r\n\r\n if (this.robot.joints[jointName].setJointValue(...values)) {\r\n\r\n this.redraw();\r\n this.dispatchEvent(new CustomEvent('angle-change', { bubbles: true, cancelable: true, detail: jointName }));\r\n\r\n }\r\n\r\n }\r\n\r\n setJointValues(values) {\r\n\r\n for (const name in values) this.setJointValue(name, values[name]);\r\n\r\n }\r\n\r\n /* Private Functions */\r\n // Updates the position of the plane to be at the\r\n // lowest point below the robot and focuses the\r\n // camera on the center of the scene\r\n _updateEnvironment() {\r\n\r\n if (!this.robot) return;\r\n\r\n this.world.updateMatrixWorld();\r\n\r\n const bbox = new THREE.Box3();\r\n bbox.setFromObject(this.robot);\r\n\r\n const center = bbox.getCenter(new THREE.Vector3());\r\n this.controls.target.y = center.y;\r\n this.plane.position.y = bbox.min.y - 1e-3;\r\n\r\n const dirLight = this.directionalLight;\r\n dirLight.castShadow = this.displayShadow;\r\n\r\n if (this.displayShadow) {\r\n\r\n // Update the shadow camera rendering bounds to encapsulate the\r\n // model. We use the bounding sphere of the bounding box for\r\n // simplicity -- this could be a tighter fit.\r\n const sphere = bbox.getBoundingSphere(new THREE.Sphere());\r\n const minmax = sphere.radius;\r\n const cam = dirLight.shadow.camera;\r\n cam.left = cam.bottom = -minmax;\r\n cam.right = cam.top = minmax;\r\n\r\n // Update the camera to focus on the center of the model so the\r\n // shadow can encapsulate it\r\n const offset = dirLight.position.clone().sub(dirLight.target.position);\r\n dirLight.target.position.copy(center);\r\n dirLight.position.copy(center).add(offset);\r\n\r\n cam.updateProjectionMatrix();\r\n\r\n }\r\n\r\n }\r\n\r\n _scheduleLoad() {\r\n\r\n // if our current model is already what's being requested\r\n // or has been loaded then early out\r\n if (this._prevload === `${ this.package }|${ this.urdf }`) return;\r\n this._prevload = `${ this.package }|${ this.urdf }`;\r\n\r\n // if we're already waiting on a load then early out\r\n if (this._loadScheduled) return;\r\n this._loadScheduled = true;\r\n\r\n if (this.robot) {\r\n\r\n this.robot.traverse(c => c.dispose && c.dispose());\r\n this.robot.parent.remove(this.robot);\r\n this.robot = null;\r\n\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n\r\n this._loadUrdf(this.package, this.urdf);\r\n this._loadScheduled = false;\r\n\r\n });\r\n\r\n }\r\n\r\n // Watch the package and urdf field and load the robot model.\r\n // This should _only_ be called from _scheduleLoad because that\r\n // ensures the that current robot has been removed\r\n _loadUrdf(pkg, urdf) {\r\n\r\n this.dispatchEvent(new CustomEvent('urdf-change', { bubbles: true, cancelable: true, composed: true }));\r\n\r\n if (urdf) {\r\n\r\n // Keep track of this request and make\r\n // sure it doesn't get overwritten by\r\n // a subsequent one\r\n this._requestId++;\r\n const requestId = this._requestId;\r\n\r\n const updateMaterials = mesh => {\r\n\r\n mesh.traverse(c => {\r\n\r\n if (c.isMesh) {\r\n\r\n c.castShadow = true;\r\n c.receiveShadow = true;\r\n\r\n if (c.material) {\r\n\r\n const mats =\r\n (Array.isArray(c.material) ? c.material : [c.material])\r\n .map(m => {\r\n\r\n if (m instanceof THREE.MeshBasicMaterial) {\r\n\r\n m = new THREE.MeshPhongMaterial();\r\n\r\n }\r\n\r\n if (m.map) {\r\n\r\n m.map.encoding = THREE.GammaEncoding;\r\n\r\n }\r\n\r\n return m;\r\n\r\n });\r\n c.material = mats.length === 1 ? mats[0] : mats;\r\n\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n };\r\n\r\n if (pkg.includes(':') && (pkg.split(':')[1].substring(0, 2)) !== '//') {\r\n // E.g. pkg = \"pkg_name: path/to/pkg_name, pk2: path2/to/pk2\"}\r\n\r\n // Convert pkg(s) into a map. E.g.\r\n // { \"pkg_name\": \"path/to/pkg_name\",\r\n // \"pk2\": \"path2/to/pk2\" }\r\n\r\n pkg = pkg.split(',').reduce((map, value) => {\r\n\r\n const split = value.split(/:/).filter(x => !!x);\r\n const pkgName = split.shift().trim();\r\n const pkgPath = split.join(':').trim();\r\n map[pkgName] = pkgPath;\r\n\r\n return map;\r\n\r\n }, {});\r\n }\r\n\r\n let robot = null;\r\n const manager = new THREE.LoadingManager();\r\n manager.onLoad = () => {\r\n\r\n // If another request has come in to load a new\r\n // robot, then ignore this one\r\n if (this._requestId !== requestId) {\r\n\r\n robot.traverse(c => c.dispose && c.dispose());\r\n return;\r\n\r\n }\r\n\r\n this.robot = robot;\r\n this.world.add(robot);\r\n updateMaterials(robot);\r\n\r\n this._setIgnoreLimits(this.ignoreLimits);\r\n\r\n this.dispatchEvent(new CustomEvent('urdf-processed', { bubbles: true, cancelable: true, composed: true }));\r\n this.dispatchEvent(new CustomEvent('geometry-loaded', { bubbles: true, cancelable: true, composed: true }));\r\n\r\n this.recenter();\r\n\r\n };\r\n\r\n if (this.urlModifierFunc) {\r\n\r\n manager.setURLModifier(this.urlModifierFunc);\r\n\r\n }\r\n\r\n const loader = new URDFLoader(manager);\r\n loader.packages = pkg;\r\n loader.loadMeshCb = this.loadMeshFunc;\r\n loader.fetchOptions = { mode: 'cors', credentials: 'same-origin' };\r\n loader.load(urdf, model => robot = model);\r\n\r\n }\r\n\r\n }\r\n\r\n // Watch the coordinate frame and update the\r\n // rotation of the scene to match\r\n _setUp(up) {\r\n\r\n if (!up) up = '+Z';\r\n up = up.toUpperCase();\r\n const sign = up.replace(/[^-+]/g, '')[0] || '+';\r\n const axis = up.replace(/[^XYZ]/gi, '')[0] || 'Z';\r\n\r\n const PI = Math.PI;\r\n const HALFPI = PI / 2;\r\n if (axis === 'X') this.world.rotation.set(0, 0, sign === '+' ? HALFPI : -HALFPI);\r\n if (axis === 'Z') this.world.rotation.set(sign === '+' ? -HALFPI : HALFPI, 0, 0);\r\n if (axis === 'Y') this.world.rotation.set(sign === '+' ? 0 : PI, 0, 0);\r\n\r\n }\r\n\r\n // Updates the current robot's angles to ignore\r\n // joint limits or not\r\n _setIgnoreLimits(ignore, dispatch = false) {\r\n\r\n if (this.robot) {\r\n\r\n Object\r\n .values(this.robot.joints)\r\n .forEach(joint => {\r\n\r\n joint.ignoreLimits = ignore;\r\n joint.setJointValue(...joint.jointValue);\r\n\r\n });\r\n\r\n }\r\n\r\n if (dispatch) {\r\n\r\n this.dispatchEvent(new CustomEvent('ignore-limits-change', { bubbles: true, cancelable: true, composed: true }));\r\n\r\n }\r\n\r\n }\r\n\r\n};\r\n"],"names":["THREE","OrbitControls","URDFLoader"],"mappings":"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"}
package/CHANGELOG.md DELETED
@@ -1,268 +0,0 @@
1
- # Changelog
2
- All notable changes to this project will be documented in this file.
3
-
4
- The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
- and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
-
7
- ## Unreleased
8
- ### Fixed
9
- - Typescript defintions for "packages" field.
10
-
11
- ## [0.10.1] - 2021-04-16
12
- ### Added
13
- - Reexport URDF Class types from the root file.
14
-
15
- ## [0.10.0] - 2021-04-16
16
- ### Fixed
17
- - `URDFJoint.axis` not correctly defaulting to `1, 0, 0`.
18
-
19
- ### Changed
20
- - Added `"type": "module"` to the package.json and made the main entry file point to the es6 module.
21
- - Export URDF Class types as `interafaces` rather than `classes`.
22
- - Changed URDF Class type definitions to be exported as `interface` rather than `class`.
23
-
24
- ## [0.9.5] - 2021-01-26
25
- ### Added
26
- - Support for "mimic" joints.
27
-
28
- ### Fixed
29
- - Incorrect mouseover and mouseout event firing with the manipulation element.
30
-
31
- ## [0.9.3] - 2021-01-19
32
- ### Fixed
33
- - Unnecessary creation of a new quaternion when setting a joint angle.
34
- - Throw a human readable error when fetch fails.
35
- - The model failing to clone if the object names were changed.
36
-
37
- ### Added
38
- - Ability to set the `packages` option to a function.
39
-
40
- ## [0.9.2] - 2020-10-23
41
- ### Added
42
- - Normal bias to shadows in URDFViewerElement.
43
-
44
- ### Fixed
45
- - Apply the mesh node scale to the parent visual node rather than the loaded mesh.
46
- - URDFViewerElement incorrectly calling setJointValue.
47
- - Incorrectly preserving rotation from loaded meshes.
48
-
49
- ## [0.9.1] - 2020-10-13
50
- ### Fixed
51
- - Fix `URDFRobot.setJointValues` not always setting all joint values.
52
-
53
- ## [0.9.0] - 2020-10-09
54
- ### Added
55
- - `URDFRobot.frames` map.
56
- - `URDFRobot.visual` map.
57
- - `URDFRobot.colliders` map.
58
- - Visual and collider nodes now get the name of the associated urdf node.
59
- - Typescript definitions for URDFVisual and URDFCollider objects.
60
- - `setJointValue` function to `URDFJoint` and `URDFRobot`.
61
- - `getFrame` function to `URDFRobot`.
62
-
63
- ### Changed
64
- - Transparent materials now set `depthWrite` to false.
65
- - Removed `setOffset`, `setAngles`, and `setAngle` functions from `URDFJoint` and `URDFRobot`.
66
-
67
- ### Fixed
68
- - Incorrect use of `worldMatrixNeedsUpdate` to `matrixWorldNeedsUpdate`.
69
-
70
- ## [0.8.2] - 2020-06-08
71
- ### Changed
72
- - License text in README to remove unnecessary copy.
73
-
74
- ## [0.8.1] - 2020-03-12
75
- ### Added
76
- - Support for processing pre-parsed XML documents to the `parse` function. A `Document` or `Element` object as returned from `DOMParser` may be passed in place of the xml string.
77
-
78
- ## [0.8.0] - 2020-01-03
79
- ### Changed
80
- - Moved the URDFLoader options to member variables instead of an object paramter to `parse` and `load` functions.
81
- - Added `onError` and `onProgress` callbacks to `load` function.
82
-
83
- ## [0.7.3] - 2019-11-08
84
- ### Fixed
85
- - Incorrect handling of empty "texture" tags that caused materials to display improperly.
86
-
87
- ## [0.7.2] - 2019-09-29
88
- ### Changed
89
- - Caltech license copy.
90
-
91
- ## [0.7.1] - 2019-06-29
92
- ### Fixed
93
- - Typescript definition file for URDFLoader.
94
-
95
- ## [0.7.0] - 2019-06-28
96
- ### Changed
97
- - Use the jsm versions of the loader modules from three.js.
98
- - Bump three.js peer dependency to 0.105.0.
99
-
100
- ## [0.6.3] - 2019-06-28
101
- ### Added
102
- - Support for parsing collision nodes.
103
-
104
- ## [0.6.2] - 2019-04-18
105
- ### Added
106
- - Typescript definition files
107
-
108
- ## [0.6.1] - 2019-03-06
109
- ### Fixed
110
- - Continuous joints not being able to rotate.
111
- - Always parse joint angles to numbers.
112
-
113
- ## [0.6.0] - 2019-02-23
114
- ### Added
115
- - Added `setAngle` and `setAngles` function to the Robot node
116
- - Added `meshLoadFunc` and `urlModifierFunc` functions to `URDFViewer` component.
117
-
118
- ### Changed
119
- - Changed `loadMeshCb` function API to take `url`, `manager`, and `done`.
120
- - Materials defined as "shared" by name in the URDF are shared among meshes, now.
121
- - The root link is now the same as the URDF Robot object.
122
- - Moved the `packages` parameter to the options object.
123
-
124
- ### Removed
125
- - Removed `urdfLoader` and `loadingManager` fields from `URDFViewer` component.
126
-
127
- ## [0.5.3] - 2018-12-17
128
- ### Added
129
- - `matrixWorldNeedsUpdate` is set to true when the URDFJoints are set.
130
-
131
- ### Fixed
132
- - Scale being overwritten on models that are loaded with pre-set scale values.
133
- - Loader not completing if a mesh could not be loaded.
134
-
135
- ## [0.5.2] - 2018-12-5
136
- ### Added
137
- - URDF XML Node to URDF Joint, Link, and Robot objects
138
- - Add clone functionality
139
-
140
- ### Changed
141
- - OnComplete callback now fires once all meshes have loaded
142
- - Removed unnecessary parent when creating a cylinder visual node
143
-
144
- ## [0.5.1] - 2018-11-14
145
- ### Fixed
146
- - Use buffer variants of Box and Sphere geometry.
147
- - Fix the way that roll, pitch, yaw rotations are applied.
148
-
149
- ## [0.5.0] - 2018-11-01
150
- ### Changed
151
- - The root scripts are now es6 import compatible and require a build process to use
152
-
153
- ### Added
154
- - Backward compatible umd versions of the scripts in `/umd`
155
- - Support for shared, named materials in the URDF
156
-
157
- ## [0.4.3] - 2018-10-10
158
- ### Added
159
- - Add `no-auto-recenter` field to the `urdf-viewer` web component.
160
-
161
- ## [0.4.2] - 2018-08-19
162
- ### Added
163
- - Include `example/styles.css`
164
-
165
- ## [0.4.1] - 2018-08-19
166
- ### Changed
167
- - README update
168
-
169
- ## [0.4.0] - 2018-08-19
170
- ### Changed
171
- - Add "path" variable to parse function signature
172
- - URDF paths are no longer resolved relative to the package path
173
- - `parse` function signature changed
174
- - `parse` returns the robot now
175
- - `meshLoadCb` and `fetchOptions` have been moved into an `options` argument object
176
- - Moved all fields from `Object3D.urdf` to the object itself
177
- - Changed `type` to `jointType`
178
-
179
- ### Added
180
- - Add `isURDFRobot`, `isURDFJoint`, `isURDFLink` fields to the robot, joints, and links
181
- - Set the `type` field of the `Object3D` to `URDFRobot`, `URDFJoint`, and `URDFLink`
182
-
183
- ### Removed
184
- - `node` field from the urdf info on joints, links, and the robot
185
-
186
- ## [0.3.5] - 2018-08-07
187
- ### Added
188
- - Add support for providing multiple package paths
189
-
190
- ### Fixed
191
- - Debounce urdf load so errors are not printed when changing models
192
- - Create mesh primitives immediately instead of waiting a frame
193
-
194
- ## [0.3.4] - 2018-07-31
195
- ### Fixed
196
- - Fixed sphere primitives not being added to the model
197
- - Fixed cylinder primitive rotation
198
-
199
- ## [0.3.3] - 2018-07-28
200
- ### Changed
201
- - Make element auto redraw whenever a texture loads
202
-
203
- ### Fixed
204
- - Fix drag and drop file path cleansing in example files
205
- - Fix console error on drag manipulation in manipulation element
206
-
207
- ## [0.3.2] - 2018-07-03
208
- ### Changed
209
- - Add urdf-manipulator element for demo
210
-
211
- ## [0.3.1] - 2018-07-01
212
- ### Fixed
213
- - Fix the example input fields not converting to radians
214
-
215
- ## [0.3.0] - 2018-06-30
216
- ### Changed
217
- - Model bounding box is used to make better use of shadow map resolution.
218
- - Fix joint controls still being clickable when hidden
219
- - Rename `joint.urdf.limits` to `joint.urdf.limit` so it lines up with the URDF definition
220
- - Full `http://` or `file://` uris are supported (package path is not prepended in this case)
221
-
222
- ## [0.2.6] - 2018-06-28
223
- ### Fixed
224
- - Render meshes double sided in shadows
225
- - Disable shadows casting on model when the shadow display is disabled
226
-
227
- ## [0.2.5] - 2018-06-28
228
- ### Changed
229
- - Do not change the material type provided by the mesh loader to MeshLambertMaterial when setting the colors from the URDF.
230
- - Use a hemisphere light and linear rendering in the element and example
231
- - Enable better shadow rendering
232
-
233
- ## [0.2.4] - 2018-06-22
234
- ### Changed
235
- - Change `urdf-viewer` element `up` attribute to default to +Z so it lines up with the default ROS coordinate frame
236
-
237
- ### Fixed
238
- - Fix the default mesh loader throwing an error because `this` was undefined.
239
-
240
- ## [0.2.3] - 2018-06-22
241
- ### Added
242
- - Add the `auto-redraw` attribute to the urdf-viewer element
243
-
244
- ## [0.2.2] - 2018-06-14
245
- ### Added
246
- - Add `redraw()` function to the viewer element
247
- - Add flipped variants of the ATHLETE URDF models
248
-
249
- ### Changed
250
- - Update example to start at a nicer viewing angle
251
- - Update some underlying example code
252
-
253
- ## [0.2.1] - 2018-06-13
254
- ### Changed
255
- - Optimize rendering in `<urdf-viewer>`
256
- - Keep the robot in the middle of the screen in `<urdf-viewer>`
257
- - Adjust the the `<urdf-viewer>` up attribute to line up with the default ROS coordinate frame
258
-
259
- ### Fixed
260
- - Meshes not scaling the by mesh tags `scale` attribute
261
- - Revolute joints rotating the wrong direction
262
-
263
- ## [0.1.2] - 2018-05-28
264
- ### Added
265
- - Support for prismatic joints
266
-
267
- ### Fixed
268
- - Fix not defaulting revolute joint limits to 0