3D Printing

Jaebum Jung
Discrete Computation, Wolfram Research

Join the Conversation #WolframTechConf

3D Printing with Wolfram Language

Ready-Made 3D-Printable Models

Importing 3D Models

Create 3D-Printable Plots

Algorithmically Generate 3D Models

Get Properties of Models

Leveraging built-in geometric computation and the extensive Wolfram Knowledgebase, properties of 3D models and materials can be computed.

model=ExampleData[{"Geometry3D","SpaceShuttle"},"Region"]

volume=Quantity[Volume[model],"Centimeters"^3]

LinguisticAssistant["Density"]*volume

area=Quantity[Area[RegionBoundary[model]],"Centimeters"^2]

Quantity[0.45, "USDollars"/"Centimeters"^2]*area

Find and Repair Defects in 3D Models

Version 11 integrates fully automated detection of mesh defects in 3D models and provides repair functionality.

Find Defects in 3D Models

FindMeshDefects[]

FindMeshDefects[,"HoleEdges"]

FindMeshDefects[,"HoleEdges","Cell"]

Repair Defects in 3D Models

RepairMesh[]

RepairMesh[,"IsolatedVertices"]

Reduce Printing Costs

To help optimize the price of material used, the Wolfram Language provides utility functions such as ShellRegion to hollow out models.

{Volume[#],Volume[ShellRegion[#]]}&@

Detect Design Issues

Use numerical differential equation-solving capabilities in the Wolfram Language to detect issues with your designs before undertaking the expense of 3D printing.

crankshaft=;

(* load the finite element package and create a finite element mesh *)

Needs["NDSolve`FEM`"]
crankshaft=ToElementMesh[DiscretizeGraphics[crankshaft],"MeshOrder"->1];

(* Specify the 3D stress formulation *)

stressOperator[Y_,ν_]:={(InactiveDiv[({{0,0,-((Y ν)/((1-2 ν) (1+ν)))},{0,0,0},{-(Y/(2 (1+ν))),0,0}}.(InactiveGrad[w[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])+(InactiveDiv[({{0,-((Y ν)/((1-2 ν) (1+ν))),0},{-(Y/(2 (1+ν))),0,0},{0,0,0}}.(InactiveGrad[v[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])+(InactiveDiv[({{-((Y (1-ν))/((1-2 ν) (1+ν))),0,0},{0,-(Y/(2 (1+ν))),0},{0,0,-(Y/(2 (1+ν)))}}.(InactiveGrad[u[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive]),(InactiveDiv[({{0,0,0},{0,0,-((Y ν)/((1-2 ν) (1+ν)))},{0,-(Y/(2 (1+ν))),0}}.(InactiveGrad[w[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])+(InactiveDiv[({{0,-(Y/(2 (1+ν))),0},{-((Y ν)/((1-2 ν) (1+ν))),0,0},{0,0,0}}.(InactiveGrad[u[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])+(InactiveDiv[({{-(Y/(2 (1+ν))),0,0},{0,-((Y (1-ν))/((1-2 ν) (1+ν))),0},{0,0,-(Y/(2 (1+ν)))}}.(InactiveGrad[v[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive]),(InactiveDiv[({{0,0,0},{0,0,-(Y/(2 (1+ν)))},{0,-((Y ν)/((1-2 ν) (1+ν))),0}}.(InactiveGrad[v[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])+(InactiveDiv[({{0,0,-(Y/(2 (1+ν)))},{0,0,0},{-((Y ν)/((1-2 ν) (1+ν))),0,0}}.(InactiveGrad[u[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])+(InactiveDiv[({{-(Y/(2 (1+ν))),0,0},{0,-(Y/(2 (1+ν))),0},{0,0,-((Y (1-ν))/((1-2 ν) (1+ν)))}}.(InactiveGrad[w[x,y,z], {x,y,z}, Inactive])), {x,y,z}, Inactive])};

(* Specify constraints such that the boundary of the crankshaft is held fixed at these positions *)

(Subscript[Γ, D])={DirichletCondition[{u[x,y,z]==0.,v[x,y,z]==0.,w[x,y,z]==0.},{y≤0.1,y≥890}]};

(* Specify a boundary load pushing in the negative z\[Hyphen]axis *)

(Subscript[Γ, L])=NeumannValue[-10000.,((217≤y≤256)&&(40≤z≤103))||
((584≤y≤622)&&(40≤z≤103))];

(* visualization *)

showStress[{uif_,vif_, wif_}]:=Show[
ToBoundaryMesh[crankshaft]["Wireframe"["MeshElementStyle"->{Directive[EdgeForm[],FaceForm[Gray]]}]],
ElementMeshDeformation[crankshaft,{uif,vif,wif},"ScalingFactor"->100]["Wireframe"[AspectRatio->Automatic,"MeshElementStyle"->Directive[EdgeForm[],FaceForm[Red]]]],ImageSize->300,ViewPoint->{-2,-2,0}
]

Find the material properties of steel.

WolframAlpha["young modulus of steel in Pa","WolframResult"]

WolframAlpha["Poisson ratio of steel","WolframResult"]

Solve and visualize the deformation.

NDSolveValue[{stressOperator[2.05*10^11,0.29]=={0,0,(Subscript[Γ, L])},(Subscript[Γ, D])},{u,v,w},{x,y,z}∈crankshaft]//showStress

Printout3D

Printing with a Local Printer

The highly automated function Printout3D allows you to directly print to your local printers.

model=(Entity["left femur", Entity["AnatomicalStructure","LeftFemur"], "Entity[\"AnatomicalStructure\", \"LeftFemur\"]", "anatomical structure"])["MeshRegion"]

Printout3D[model]

Saving 3D Print-Ready Models

Version 11 supports export of 3D geometry from all standard formats and generates 3D print-ready files.

files=Map[Hyperlink[Style[#,White],"paclet:ref/format/"<>#]& , {{"STL","PLY","OBJ","OFF","DXF","DAE","ZPR","VTK","BYU"},{"X3D","JVX","VRML","Maya","POV","LWO","3DS","RIB","XYZ"}},{2}];
Style[Grid[files,Background->{None,{{Hue[.55,.7,.7],Hue[.55,.7,.7]}}},
FrameStyle->Directive[Thick,White],Alignment->{{Left,Center}}, Dividers->All,Spacings->{1,2}],FontFamily->"Verdana"]

model=ExampleData[{"Geometry3D","Triceratops"},"BoundaryMeshRegion"];

Printout3D[model,"model.stl"]

Printing with an Online Printing Service

3D printing services include:

({{, i.materialise}, {, Sculpteo}, {, Shapeways}, {, 3D Hubs}})

model=ExampleData[{"Geometry3D","Triceratops"},"BoundaryMeshRegion"];

Printout3D[model, "Sculpteo"]

3D Printing in Wolfram Language

Capabilities

Directly print 3D models to local printers and online 3D printing services.

Easily create 3D-printable plots from a variety of plot functions.

Directly import and export a wide range of 3D geometry and modeling formats, including STL, OBJ and more.

State-of-the-art detection of defects in 3D models and automatic repair.

Utilities for analyzing, resizing, hollowing out and adjusting 3D models.

Extensive capabilities in the Wolfram Language for modeling, visualizing and analyzing 3D models.

Learn More

Marketing Page [web]

Guide Page [product] [web]

Other geometry talks

What’s New in Geometry

Wednesday 1:00-1:30PM

Spartan / Golden Gopher

3D Printing

Wednesday 5:00-5:30PM

Spartan / Golden Gopher

Meshes From Everywhere

Thursday 9:30-10:00PM

Spartan / Golden Gopher

Game Engines

Friday 4:30-5:00PM

Fighting Illini