AnatomyPlot3D

Jeff Bryant, Wolfram|Alpha

Join the Conversation #WolframTechConf

Origins

In Mathematica 10, support for anatomical structures in EntityValue was introduced which included, among many other things, a “Graphics3D” property that returns a 3D model of the anatomical structure in question. Alignment of the 3D models with the concepts in the Unified Medical Language System (UMLS) was coordinated with Keiko Hirayama and coloring and styling of the models was coordinated with Tim Shedelbower.

EntityValue[{(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"]),(Entity["left hand", Entity["AnatomicalStructure","LeftHand"], "Entity[\"AnatomicalStructure\", \"LeftHand\"]", "anatomical structure"])},"Graphics3D"]

The output is a standard Graphics3D expression:

Head[(Entity["left thumb", Entity["AnatomicalStructure","LeftThumb"], "Entity[\"AnatomicalStructure\", \"LeftThumb\"]", "anatomical structure"])["Graphics3D"]]

but it contains metadata in the form of Annotation that allows for additional exploration. This means each model knows what lower-level structures its made of.

(Entity["left hand", Entity["AnatomicalStructure","LeftHand"], "Entity[\"AnatomicalStructure\", \"LeftHand\"]", "anatomical structure"])["Graphics3D"]/.Annotation[x_,y_]:>Tooltip[x,y["Name"]]

Cases[(Entity["left thumb", Entity["AnatomicalStructure","LeftThumb"], "Entity[\"AnatomicalStructure\", \"LeftThumb\"]", "anatomical structure"])["Graphics3D"],Annotation[x_,y_]:>y,Infinity]

Extending Graphics3D

Rather than designing a whole new language to explore these 3D models, the decision was made to “extend” the existing Graphics3D language to achieve the goal. Here’s a simple example of the Graphics3D language.

Graphics3D[{Red,Sphere[],Blue,Sphere[{1,0,0}],{Yellow,Sphere[{.5,0,-1}]},Sphere[{.5,0,1}]}]

The Graphics3D language is based on directives and primitives, with the front end capable of typesetting these natively without having to convert to simpler structures in the resulting expression. Sphere remains Sphere.

A complication with the anatomical structures is that their 3D models are not individual primitives that the front end can natively render as an atomic thing. They are made up of complicated structures such as GraphicsComplex with directives and baked-in styles. Without special tools, trying to modify these models would require knowledge of the structure which may not be obvious. A tool was needed that allows you to represent the model in a simple way that the language understands, but doesn’t require any special knowledge of the internal structure inside them. Treating the complicated models like primitives was a design goal. AnatomyPlot3D was born.

Basics of AnatomyPlot3D

Graphics3D primitives and directives don’t require special trips to the kernel to parse them, in general. The front end renders them natively. But to represent anatomical structures, using the entity representation, into the Graphics3D language requires special evaluation. The front end doesn’t recognize Entity[“AnatomicalStructure”, “LeftFemur”] as a primitive so Graphics3D would not know how to do anything with it. But by creating a new symbol, AnatomyPlot3D, the ability to carry out evaluations in the kernel becomes available, similar to the way Plot3D and friends allows special evaluations but still returns Graphics3D in the end.

AnatomyPlot3D[{(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"])}]

AnatomyPlot3D[{Red,(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"]),Blue,(Entity["right femur", Entity["AnatomicalStructure","RightFemur"], "Entity[\"AnatomicalStructure\", \"RightFemur\"]", "anatomical structure"]),{Yellow,(Entity["hip bone", Entity["AnatomicalStructure","HipBone"], "Entity[\"AnatomicalStructure\", \"HipBone\"]", "anatomical structure"])},(Entity["sacrum", Entity["AnatomicalStructure","Sacrum"], "Entity[\"AnatomicalStructure\", \"Sacrum\"]", "anatomical structure"])}]

Head[%]

Unlike Graphics3D, the underlying expression doesn’t contain the original Entity objects. They get resolved at evaluation time into their respective models, and the normal rules of the graphics language apply to them just like primitives.

Basics of AnatomyPlot3D – continued

Because AnatomyPlot3D can be thought of as an extension to the Graphics3D language, you can mix anatomical structures with normal Graphics3D primitives.

AnatomyPlot3D[{(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"]),Cuboid[{200,-44,550},{222,44,575}]},Boxed->True,Axes->True]

In AnatomyPlot3D, the Graphics3D language has been extended at multiple levels to make use of anatomical structures. As standalone primitives, they work as you might expect. But when used inside of other Graphics3D primitives they make convenient references to the coordinates of the entity in question. This allows you, for example, to draw a line from one entity to another, using the region centroid of the entities in question as a reference point.

AnatomyPlot3D[{(Entity["left hand", Entity["AnatomicalStructure","LeftHand"], "Entity[\"AnatomicalStructure\", \"LeftHand\"]", "anatomical structure"]),(Entity["right hand", Entity["AnatomicalStructure","RightHand"], "Entity[\"AnatomicalStructure\", \"RightHand\"]", "anatomical structure"]),Thick,Red,Line[{(Entity["left hand", Entity["AnatomicalStructure","LeftHand"], "Entity[\"AnatomicalStructure\", \"LeftHand\"]", "anatomical structure"]),(Entity["right hand", Entity["AnatomicalStructure","RightHand"], "Entity[\"AnatomicalStructure\", \"RightHand\"]", "anatomical structure"])}]},ImageSize->600]

The above concept can be applied, for example, to annotate a 3D model using arrows and labels.

AnatomyPlot3D[{(Entity["skeleton of right hand", Entity["AnatomicalStructure","SkeletonOfRightHand"], "Entity[\"AnatomicalStructure\", \"SkeletonOfRightHand\"]", "anatomical structure"]),Red,Arrow[{{-175,-130,758},(Entity["right fifth metacarpal bone", Entity["AnatomicalStructure","RightFifthMetacarpalBone"], "Entity[\"AnatomicalStructure\", \"RightFifthMetacarpalBone\"]", "anatomical structure"])},5],Text["5th metacarpal",{-175,-130,758},{0,-1}]}]

AnatomyForm

As a result of the structural complexity of the 3D models, there are operations you might want to perform on them that don’t apply to a typical primitive. What if you want to style a sub-part of an entity differently from the rest. Because the Graphics3D language is built on top of atomic objects like primitives, you need to build things up from scratch to do something like this. But, using AnatomyPlot3D, you can refer to the these sub-parts and apply styles to them. A new language element was needed to allow this and it’s called AnatomyForm. It applies only to anatomical structures (not Graphics3D primitives) and supports a couple of different forms. The following example behaves similar to a standalone directive, except that it applies only to the anatomical structure, not the Cuboid.

AnatomyPlot3D[{AnatomyForm[EdgeForm[{Thick,Blue}]],(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"]),Cuboid[{200,-44,550},{222,44,575}]},Boxed->True,Axes->True]

But, a more useful form can be leveraged to style sub-parts:

AnatomyPlot3D[{AnatomyForm[<|(Entity["bone", Entity["AnatomicalStructure","SetOfBones"], "Entity[\"AnatomicalStructure\", \"SetOfBones\"]", "anatomical structure"])->Blue,(Entity["muscle", Entity["AnatomicalStructure","Muscle"], "Entity[\"AnatomicalStructure\", \"Muscle\"]", "anatomical structure"])->Green|>],(Entity["left hand", Entity["AnatomicalStructure","LeftHand"], "Entity[\"AnatomicalStructure\", \"LeftHand\"]", "anatomical structure"])}]

AnatomyPlot3D[{AnatomyForm[<|(Entity["long head of left biceps brachii", Entity["AnatomicalStructure","LongHeadOfLeftBicepsBrachii"], "Entity[\"AnatomicalStructure\", \"LongHeadOfLeftBicepsBrachii\"]", "anatomical structure"])->Green,(Entity["short head of left biceps brachii", Entity["AnatomicalStructure","ShortHeadOfLeftBicepsBrachii"], "Entity[\"AnatomicalStructure\", \"ShortHeadOfLeftBicepsBrachii\"]", "anatomical structure"])->Blue|>],(Entity["left arm", Entity["AnatomicalStructure","LeftArm"], "Entity[\"AnatomicalStructure\", \"LeftArm\"]", "anatomical structure"])}]

AnatomyForm — continued

AnatomyForm works by allowing you to associate specified directives to specified entities that may or may not exist in the structure you are visualizing. Any Directive supported by Graphics3D is supported, including Lighting, Opacity, EdgeForm, FaceForm, ClipPlanes, and any combination of them. In addition to supporting styles for specific entities, AnatomyForm also supports a default case via the use of an underscore.

reverselights=Join[{{"Ambient",Black}},Table[{"Directional",Hue[.58,.5,1],ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2 Pi-2 Pi/8,2 Pi/8}]];

AnatomyPlot3D[{AnatomyForm[<|_->Directive[Specularity[White,50],Hue[.58,0,1,.1],Lighting->reverselights],(Entity["left humerus", Entity["AnatomicalStructure","LeftHumerus"], "Entity[\"AnatomicalStructure\", \"LeftHumerus\"]", "anatomical structure"])->Red|>],(Entity["left arm", Entity["AnatomicalStructure","LeftArm"], "Entity[\"AnatomicalStructure\", \"LeftArm\"]", "anatomical structure"])},Background->Hue[.58,1,.3],SphericalRegion->True]

Options

PlotRange can make use of entities to constrain what would otherwise include all of the referenced entities:

AnatomyPlot3D[{(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"]),(Entity["left tibia", Entity["AnatomicalStructure","LeftTibia"], "Entity[\"AnatomicalStructure\", \"LeftTibia\"]", "anatomical structure"]),(Entity["left fibula", Entity["AnatomicalStructure","LeftFibula"], "Entity[\"AnatomicalStructure\", \"LeftFibula\"]", "anatomical structure"]),(Entity["left patella", Entity["AnatomicalStructure","LeftPatella"], "Entity[\"AnatomicalStructure\", \"LeftPatella\"]", "anatomical structure"])},PlotRange->(Entity["left patella", Entity["AnatomicalStructure","LeftPatella"], "Entity[\"AnatomicalStructure\", \"LeftPatella\"]", "anatomical structure"]),PlotRangePadding->50]

SkinStyle is a convenient was to include any enclosing skin that can be found around the specified entities:

AnatomyPlot3D[{(Entity["right hand", Entity["AnatomicalStructure","RightHand"], "Entity[\"AnatomicalStructure\", \"RightHand\"]", "anatomical structure"])},SkinStyle->Automatic]

The default styling can be overridden:

AnatomyPlot3D[{(Entity["right hand", Entity["AnatomicalStructure","RightHand"], "Entity[\"AnatomicalStructure\", \"RightHand\"]", "anatomical structure"])},SkinStyle->Directive[Blue,Opacity[.3]]]

ClipPlanes – an Aside

In Mathematica 10, ClipPlanes was added as a Graphics3D option which allows you to specify clipping planes for the 3D scene.

Graphics3D[{Blue,Sphere[{0,0,0},1/2],Red,Sphere[]},ClipPlanes->InfinitePlane[{{0,0,0},{0,1,1},{1,1,2}}]]

In Mathematica, this functionality was extended to work as a directive so it can be applied to specific elements within a scene.

Graphics3D[{Blue,Sphere[{0,0,0},1/2],Red,ClipPlanes->InfinitePlane[{{0,0,0},{0,1,1},{1,1,2}}],Sphere[]}]

Graphics3D[{Blue,Sphere[{0,0,0},1/2],Red,ClipPlanes->InfinitePlane[{{0,0,0},{0,1,1},{1,1,2}}],Sphere[],Opacity[0.2],Orange,ClipPlanes->InfinitePlane[{{1,1,2},{0,1,1},{0,0,0}}],Sphere[]}]

More Examples

Using ClipPlanes as a directive to cut away the skin:

With[{z=1000},AnatomyPlot3D[{(Entity["left upper limb", Entity["AnatomicalStructure","LeftUpperLimb"], "Entity[\"AnatomicalStructure\", \"LeftUpperLimb\"]", "anatomical structure"]),ClipPlanes->{InfinitePlane[{{0,-300,z},{300,-300,z+200},{200,0,z}}]},(Entity["skin of left upper limb", Entity["AnatomicalStructure","SkinOfLeftUpperLimb"], "Entity[\"AnatomicalStructure\", \"SkinOfLeftUpperLimb\"]", "anatomical structure"])}]]

multiple clip planes:

AnatomyPlot3D[{AnatomyForm[Association[(Entity["muscle", Entity["AnatomicalStructure","Muscle"], "Entity[\"AnatomicalStructure\", \"Muscle\"]", "anatomical structure"])->Directive[RGBColor[0,1,1],ClipPlanes->{InfinitePlane[{{0,-100,850},{300,0,1050},{0,0,850}}]}],(Entity["skin", Entity["AnatomicalStructure","Skin"], "Entity[\"AnatomicalStructure\", \"Skin\"]", "anatomical structure"])->Directive[RGBColor[0,1,0],ClipPlanes->{InfinitePlane[{{0,-200,1050},{300,0,1250},{0,0,1050}}]}],(Entity["bone", Entity["AnatomicalStructure","SetOfBones"], "Entity[\"AnatomicalStructure\", \"SetOfBones\"]", "anatomical structure"])->RGBColor[1,0.5,0],All->Transparent]],(Entity["left upper limb", Entity["AnatomicalStructure","LeftUpperLimb"], "Entity[\"AnatomicalStructure\", \"LeftUpperLimb\"]", "anatomical structure"]),(Entity["skin", Entity["AnatomicalStructure","Skin"], "Entity[\"AnatomicalStructure\", \"Skin\"]", "anatomical structure"])},PlotRange->{{0,400},{-300,100},{650,1375}},Background->Hue[.58,1,.3]]

Using geometric transformations on anatomical structures:

Grid[{Table[AnatomyPlot3D[{(Entity["neurocranium", Entity["AnatomicalStructure","Neurocranium"], "Entity[\"AnatomicalStructure\", \"Neurocranium\"]", "anatomical structure"]),(Entity["zygomatic bone", Entity["AnatomicalStructure","ZygomaticBone"], "Entity[\"AnatomicalStructure\", \"ZygomaticBone\"]", "anatomical structure"]),(Entity["sphenoid bone", Entity["AnatomicalStructure","SphenoidBone"], "Entity[\"AnatomicalStructure\", \"SphenoidBone\"]", "anatomical structure"]),(Entity["nasal bone", Entity["AnatomicalStructure","NasalBone"], "Entity[\"AnatomicalStructure\", \"NasalBone\"]", "anatomical structure"]),(Entity["maxilla", Entity["AnatomicalStructure","Maxilla"], "Entity[\"AnatomicalStructure\", \"Maxilla\"]", "anatomical structure"]),(Entity["maxillary dentition", Entity["AnatomicalStructure","MaxillaryDentition"], "Entity[\"AnatomicalStructure\", \"MaxillaryDentition\"]", "anatomical structure"]),Rotate[{(Entity["mandible", Entity["AnatomicalStructure","Mandible"], "Entity[\"AnatomicalStructure\", \"Mandible\"]", "anatomical structure"]),(Entity["mandibular dentition", Entity["AnatomicalStructure","MandibularDentition"], "Entity[\"AnatomicalStructure\", \"MandibularDentition\"]", "anatomical structure"])},t Degree,{1,0,0},(Entity["temporomandibular joint", Entity["AnatomicalStructure","TemporomandibularJoint"], "Entity[\"AnatomicalStructure\", \"TemporomandibularJoint\"]", "anatomical structure"])]},SphericalRegion->True,PlotRange->(Entity["skull", Entity["AnatomicalStructure","Skull"], "Entity[\"AnatomicalStructure\", \"Skull\"]", "anatomical structure"]),PlotRangePadding->20],{t,{0,10,20}}]}]

Advanced Examples

Mixed tissue types and styles for the head:

AnatomyPlot3D[{{ClipPlanes->{InfinitePlane[{{-50,-146,1500},{-20,-146-20,1550},{-50,-146-20,1500}}],InfinitePlane[{{-50,-146,1550},{-20,-146-20,1550},{-50,-146-20,1550}}]},(Entity["skull", Entity["AnatomicalStructure","Skull"], "Entity[\"AnatomicalStructure\", \"Skull\"]", "anatomical structure"])},(Entity["eye", Entity["AnatomicalStructure","Eye"], "Entity[\"AnatomicalStructure\", \"Eye\"]", "anatomical structure"]),(Entity["brain", Entity["AnatomicalStructure","Brain"], "Entity[\"AnatomicalStructure\", \"Brain\"]", "anatomical structure"]),Directive[Specularity[White,50],Hue[.58,0,1,.1],Lighting->Join[{{"Ambient",Black}},Table[{"Directional",Hue[.58,.5,1],ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2Pi-2Pi/8,2Pi/8}]]],(Entity["nose", Entity["AnatomicalStructure","Nose"], "Entity[\"AnatomicalStructure\", \"Nose\"]", "anatomical structure"]),(Entity["neck", Entity["AnatomicalStructure","Neck"], "Entity[\"AnatomicalStructure\", \"Neck\"]", "anatomical structure"]),(Entity["skin of head", Entity["AnatomicalStructure","SkinOfHead"], "Entity[\"AnatomicalStructure\", \"SkinOfHead\"]", "anatomical structure"]),(Entity["skin of neck", Entity["AnatomicalStructure","SkinOfNeck"], "Entity[\"AnatomicalStructure\", \"SkinOfNeck\"]", "anatomical structure"]),(Entity["lip", Entity["AnatomicalStructure","Lip"], "Entity[\"AnatomicalStructure\", \"Lip\"]", "anatomical structure"]),(Entity["ear", Entity["AnatomicalStructure","Ear"], "Entity[\"AnatomicalStructure\", \"Ear\"]", "anatomical structure"])},PlotRange->(Entity["head", Entity["AnatomicalStructure","Head"], "Entity[\"AnatomicalStructure\", \"Head\"]", "anatomical structure"]),PlotRangePadding->10,Background->Hue[.58,1,.3],SphericalRegion->True,ViewAngle->Pi/5,ImageSize->600,ViewPoint->{-1.4,-1.29,0.07},ViewVertical->{0.16,-0.08,1.}]

Mixed tissue types and styles for the torso:

reverselights=Join[{{"Ambient",Black}},Table[{"Directional",Hue[.58,.5,1],ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2 Pi-2 Pi/8,2 Pi/8}]];

reverselights2=Join[{{"Ambient",GrayLevel[.3]}},Table[{"Directional",Yellow,ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2 Pi-2 Pi/8,2 Pi/8}]];

AnatomyPlot3D[{(Entity["rib cage", Entity["AnatomicalStructure","RibCage"], "Entity[\"AnatomicalStructure\", \"RibCage\"]", "anatomical structure"]),(Entity["esophagus", Entity["AnatomicalStructure","Esophagus"], "Entity[\"AnatomicalStructure\", \"Esophagus\"]", "anatomical structure"]),(Entity["stomach", Entity["AnatomicalStructure","Stomach"], "Entity[\"AnatomicalStructure\", \"Stomach\"]", "anatomical structure"]),(Entity["small intestine", Entity["AnatomicalStructure","SmallIntestine"], "Entity[\"AnatomicalStructure\", \"SmallIntestine\"]", "anatomical structure"]),(Entity["large intestine", Entity["AnatomicalStructure","LargeIntestine"], "Entity[\"AnatomicalStructure\", \"LargeIntestine\"]", "anatomical structure"]),(Entity["spleen", Entity["AnatomicalStructure","Spleen"], "Entity[\"AnatomicalStructure\", \"Spleen\"]", "anatomical structure"]),(Entity["liver", Entity["AnatomicalStructure","Liver"], "Entity[\"AnatomicalStructure\", \"Liver\"]", "anatomical structure"]),(Entity["lung", Entity["AnatomicalStructure","Lung"], "Entity[\"AnatomicalStructure\", \"Lung\"]", "anatomical structure"]),(Entity["heart", Entity["AnatomicalStructure","Heart"], "Entity[\"AnatomicalStructure\", \"Heart\"]", "anatomical structure"]),(Entity["kidney", Entity["AnatomicalStructure","Kidney"], "Entity[\"AnatomicalStructure\", \"Kidney\"]", "anatomical structure"]),(Entity["urinary bladder", Entity["AnatomicalStructure","UrinaryBladder"], "Entity[\"AnatomicalStructure\", \"UrinaryBladder\"]", "anatomical structure"]),{Directive[Specularity[White,50],Hue[.58,0,1,.1],Lighting->reverselights],(Entity["musculature of trunk", Entity["AnatomicalStructure","MusculatureOfTrunk"], "Entity[\"AnatomicalStructure\", \"MusculatureOfTrunk\"]", "anatomical structure"]),(Entity["musculature of pectoral girdle", Entity["AnatomicalStructure","MusculatureOfPectoralGirdle"], "Entity[\"AnatomicalStructure\", \"MusculatureOfPectoralGirdle\"]", "anatomical structure"]),(Entity["pectoralis major", Entity["AnatomicalStructure","PectoralisMajor"], "Entity[\"AnatomicalStructure\", \"PectoralisMajor\"]", "anatomical structure"])}},Background->Hue[.58,1,.3],SphericalRegion->True,ViewAngle->Pi/10,ImageSize->600]

Use ClipPlanes to erase muscles:

reverselights=Join[{{"Ambient",Black}},Table[{"Directional",Hue[.58,.5,1],ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2 Pi-2 Pi/8,2 Pi/8}]];

With[{z=1100},
AnatomyPlot3D[{
{ClipPlanes->{InfinitePlane[{{0,-100,z},{0,0,z},{300,0,z}}]},AnatomyForm[<|(Entity["muscle", Entity["AnatomicalStructure","Muscle"], "Entity[\"AnatomicalStructure\", \"Muscle\"]", "anatomical structure"])->Directive[Specularity[White,50],Hue[.58,0,1,.1],Lighting->reverselights]|>],(Entity["left upper limb", Entity["AnatomicalStructure","LeftUpperLimb"], "Entity[\"AnatomicalStructure\", \"LeftUpperLimb\"]", "anatomical structure"])},
{ClipPlanes->{InfinitePlane[{{0,-100,z},{300,0,z},{0,0,z}}]},(Entity["left upper limb", Entity["AnatomicalStructure","LeftUpperLimb"], "Entity[\"AnatomicalStructure\", \"LeftUpperLimb\"]", "anatomical structure"])}
},ViewVertical->{1,0,0},Background->Hue[.58,1,.3],ImageSize->{700,400},SphericalRegion->True,ViewAngle->Pi/10]]

Mixed styles for the brain:

reverselights=Join[{{"Ambient",Black}},Table[{"Directional",Hue[.58,.5,1],ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2 Pi-2 Pi/8,2 Pi/8}]];

reverselights2=Join[{{"Ambient",GrayLevel[.3]}},Table[{"Directional",Yellow,ImageScaled[{Sin[x],Cos[x],-.5}]},{x,0,2 Pi-2 Pi/8,2 Pi/8}]];

AnatomyPlot3D[{AnatomyForm[<|(Entity["brainstem", Entity["AnatomicalStructure","Brainstem"], "Entity[\"AnatomicalStructure\", \"Brainstem\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["hypothalamus", Entity["AnatomicalStructure","Hypothalamus"], "Entity[\"AnatomicalStructure\", \"Hypothalamus\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["thalamus", Entity["AnatomicalStructure","Thalamus"], "Entity[\"AnatomicalStructure\", \"Thalamus\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["lateral ventricle", Entity["AnatomicalStructure","LateralVentricle"], "Entity[\"AnatomicalStructure\", \"LateralVentricle\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["third ventricle", Entity["AnatomicalStructure","ThirdVentricle"], "Entity[\"AnatomicalStructure\", \"ThirdVentricle\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["fourth ventricle", Entity["AnatomicalStructure","FourthVentricle"], "Entity[\"AnatomicalStructure\", \"FourthVentricle\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["lateral geniculate body", Entity["AnatomicalStructure","LateralGeniculateBody"], "Entity[\"AnatomicalStructure\", \"LateralGeniculateBody\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],(Entity["medial geniculate body", Entity["AnatomicalStructure","MedialGeniculateBody"], "Entity[\"AnatomicalStructure\", \"MedialGeniculateBody\"]", "anatomical structure"])->Directive[Specularity[White,50],Red,Lighting->reverselights2],_->Directive[Specularity[White,50],Hue[.58,0,1,.1],Lighting->reverselights]|>],(Entity["brain", Entity["AnatomicalStructure","Brain"], "Entity[\"AnatomicalStructure\", \"Brain\"]", "anatomical structure"])},Background->Hue[.58,1,.3],ImageSize->600,SphericalRegion->True,ViewAngle->Pi/6,ViewPoint->{-1.4,-1.29,0.07},ViewVertical->{0.16,-0.08,1.},BaseStyle->{RenderingOptions->{"DepthPeelingLayers"->20}}]

Future plans and Additional Links

Support for “named” Directives via AnatomyForm[“string value”]

AnatomyPlot3D[{AnatomyForm["XRay"],...}]

Support for PlotThemes

AnatomyPlot3D[...,PlotTheme->"XRay"]

AnatomyPlot3D[...,PlotTheme->"Monochrome"]

Additional structures

Videos

Opening and closing jaw

Rotating head

Rotating brain

Rotating torso

Erasing muscles in arm

Scaling transform applied to skull bones

Additional Talks

Custom Entities, Toni Schindler, Friday 10:00 - 10:30 AM

3D Graphics, Yuzhu Lu, Friday 4:00 - 4:30 PM

References

Knowledgebase Expansion

New Visualization Domains

AnatomyPlot3D

AnatomyForm

ClipPlanes