1"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([["15675"],{91007:function(e,t,n){n.r(t),n.d(t,{metadata:()=>o,default:()=>p,frontMatter:()=>l,contentTitle:()=>c,toc:()=>u,assets:()=>d});var o=JSON.parse('{"id":"concepts/cornerstone-tools/index","title":"Cornerstone Tools","description":"Tools","source":"@site/docs/concepts/cornerstone-tools/index.md","sourceDirName":"concepts/cornerstone-tools","slug":"/concepts/cornerstone-tools/","permalink":"/docs/concepts/cornerstone-tools/","draft":false,"unlisted":false,"editUrl":"https://github.com/cornerstonejs/cornerstone3D/edit/main/packages/docs/docs/concepts/cornerstone-tools/index.md","tags":[],"version":"current","frontMatter":{"id":"index","title":"Cornerstone Tools","summary":"Framework for creating and managing interactive tools for manipulating and annotating medical images in 3D space, with annotations stored in patient coordinates"},"sidebar":"docs","previous":{"title":"Progressive Loading for non-HTJ2K","permalink":"/docs/concepts/progressive-loading/non-htj2k-progressive"},"next":{"title":"Tools","permalink":"/docs/concepts/cornerstone-tools/tools"}}'),r=n(31085),s=n(92600),i=n(31251),a=n(28760);let l={id:"index",title:"Cornerstone Tools",summary:"Framework for creating and managing interactive tools for manipulating and annotating medical images in 3D space, with annotations stored in patient coordinates"},c="Tools Introduction",d={},u=[{value:"Tools",id:"tools",level:2}];function m(e){let t={code:"code",h1:"h1",h2:"h2",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"tools-introduction",children:"Tools Introduction"})}),"\n",(0,r.jsx)(t.h2,{id:"tools",children:"Tools"}),"\n",(0,r.jsxs)(t.p,{children:["With ",(0,r.jsx)(t.code,{children:"Cornerstone3D"})," core library where each image renders in physical space (even our stack viewports are rendered at the actual position and normal direction in space), rather than any arbitrary 2D plane, we built a ",(0,r.jsx)(t.code,{children:"Tools"})," library to be able to create and manipulate tools in 3D space.\nIn ",(0,r.jsx)(t.code,{children:"Cornerstone3DTools"}),", annotations are now stored in 3D patient space in a particular DICOM Frame of Reference (FoR). In general, all images in a single DICOM study exist in the same FoR (e.g. both PET and CT in a PET/CT acquisition). Let's take a look at some concepts\nthat we will use in this library."]}),"\n",(0,r.jsx)(i.A,{items:(0,a.$S)().items})]})}function p(e={}){let{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},31251:function(e,t,n){n.d(t,{A:()=>x});var o=n(31085);n(14041);var r=n(84349),s=n(82048),i=n(45410),a=n(97853),l=n(57786),c=n(21610),d=n(69691);function u({href:e,children:t}){return(0,o.jsx)(i.A,{href:e,className:(0,r.A)("card padding--lg","cardContainer_Shn5"),children:t})}function m({href:e,icon:t,title:n,description:s}){return(0,o.jsxs)(u,{href:e,children:[(0,o.jsxs)(d.A,{as:"h2",className:(0,r.A)("text--truncate","cardTitle_h48N"),title:n,children:[t," ",n]}),s&&(0,o.jsx)("p",{className:(0,r.A)("text--truncate","cardDescription_CytT"),title:s,children:s})]})}function p({item:e}){let t=(0,s.Nr)(e),n=function(){let{selectMessage:e}=(0,a.W)();return t=>e(t,(0,c.T)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t}))}();return t?(0,o.jsx)(m,{href:t,icon:"\u{1F5C3}\uFE0F",title:e.label,description:e.description??n(e.items.length)}):null}function h({item:e}){let t=(0,l.A)(e.href)?"\u{1F4C4}\uFE0F":"\u{1F517}",n=(0,s.cC)(e.docId??void 0);return(0,o.jsx)(m,{href:e.href,icon:t,title:e.label,description:e.description??n?.description})}function f({item:e}){switch(e.type){case"link":return(0,o.jsx)(h,{item:e});case"category":return(0,o.jsx)(p,{item:e});default:throw Error(`unknown item type ${JSON.stringify(e)}`)}}function g({className:e}){let t=(0,s.$S)();return(0,o.jsx)(x,{items:t.items,className:e})}function x(e){let{items:t,className:n}=e;if(!t)return(0,o.jsx)(g,{...e});let i=(0,s.d1)(t);return(0,o.jsx)("section",{className:(0,r.A)("row",n),children:i.map((e,t)=>(0,o.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,o.jsx)(f,{item:e})},t))})}},28760:function(e,t,n){function o(...e){return n(3148).$S(...e)}n.d(t,{$S:()=>o}),n(8998)},97853:function(e,t,n){n.d(t,{W:()=>l});var o=n(14041),r=n(8998);let s=["zero","one","two","few","many","other"];function i(e){return s.filter(t=>e.includes(t))}let a={locale:"en",pluralForms:i(["one","other"]),select:e=>1===e?"one":"other"};function l(){let e=function(){let{i18n:{currentLocale:e}}=(0,r.A)();return(0,o.useMemo)(()=>{try{let t;return t=new Intl.PluralRules(e),{locale:e,pluralForms:i(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}". 2Docusaurus will fallback to the default (English) implementation. 3Error: ${t.message} 4`),a}},[e])}();
4return{selectMessage:(t,n)=>(function(e,t,n){let o=e.split("|");if(1===o.length)return o[0];o.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${o.length}: ${e}`);let r=n.select(t);return o[Math.min(n.pluralForms.indexOf(r),o.length-1)]})(n,t,e)}}},92600:function(e,t,n){n.d(t,{R:()=>i,x:()=>a});var o=n(14041);let r={},s=o.createContext(r);function i(e){let t=o.useContext(s);return o.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.