(*by Nasser M. Abbasi, verion sept 7, 2013*)

Manipulate[
 Module[{g, p1, p2, p3, p4, p5, p6, p7, p8, 
   e = ee*10^9, \[Sigma]x = \[Sigma]xx*10^6, \[Sigma]y = \
\[Sigma]yy*10^6, \[Sigma]z = \[Sigma]zz*10^6, \[Tau]xy = \
\[Tau]xyxy*10^6, \[Tau]yz = \[Tau]yzyz*10^6, \[Tau]zx = \
\[Tau]zxzx*10^6},
  
  g = e/(2 (1 + \[Nu]));
  \[Epsilon]x = \[Sigma]x/e - \[Nu]/e (\[Sigma]y + \[Sigma]z);
  \[Epsilon]y = \[Sigma]y/e - \[Nu]/e (\[Sigma]x + \[Sigma]z);
  \[Epsilon]z = \[Sigma]z/e - \[Nu]/e (\[Sigma]y + \[Sigma]x);
  \[Gamma]xy = \[Tau]xy/g;
  \[Gamma]yz = \[Tau]yz/g;
  \[Gamma]zx = \[Tau]zx/g;
  
  {p1, p2, p3, p4, p5, p6, p7, p8} = 
   getCoordinates[
    strainType, \[Epsilon]x, \[Epsilon]y, \[Epsilon]z, \[Gamma]xy, \
\[Gamma]yz, \[Gamma]zx, k];
  
  Style[Framed@Graphics3D[
     Rotate[
      {
       If[plotStyle == 1,
        {
         {EdgeForm[{Thick, Red}], FaceForm[Opacity[.3]],
          
          Polygon[{ p1, p2, p3, p4}],
          Polygon[{ p5, p6, p7, p8}],
          Polygon[{ p4, p3, p7, p8}],
          Polygon[{ p1, p2, p6, p5}],
          Polygon[{ p2, p6, p7, p3}],
          Polygon[{ p4, p8, p5, p1}]
          }
         },
        {
         {FaceForm[{Opacity[0.3]}, White],
          Polygon[{ p1, p2, p3, p4}],
          Polygon[{ p5, p6, p7, p8}],
          Polygon[{ p4, p3, p7, p8}],
          Polygon[{ p1, p2, p6, p5}],
          Polygon[{ p2, p6, p7, p3}],
          Polygon[{ p4, p8, p5, p1}]
          }
         }
        ],
       
       If[showOriginal,
        {Gray, Dashed,
         Line[{{-1/2, -1/2, 1/2}, {1/2, -1/2, 
            1/2}, {1/2, -1/2, -1/2}, {-1/2, -1/2, -1/2}, {-1/2, -1/2, 
            1/2}}],
         Line[{{-1/2, 1/2, 1/2}, {1/2, 1/2, 1/2}, {1/2, 
            1/2, -1/2}, {-1/2, 1/2, -1/2}, {-1/2, 1/2, 1/2}}],
         Line[{{-1/2, -1/2, -1/2}, {-1/2, 1/2, -1/2}}],
         Line[{{1/2, -1/2, -1/2}, {1/2, 1/2, -1/2}}],
         Line[{{-1/2, -1/2, 1/2}, {-1/2, 1/2, 1/2}}],
         Line[{{1/2, -1/2, 1/2}, {1/2, 1/2, 1/2}}]
         },
        {}
        ],
       
       If[showAxes,
        {
         {Arrowheads[.02],
          
          Arrow[{{0, 0, 0}, #}] & /@ {{.25, 0, 0}, {0, 0.25, 0}, {0, 
             0, 0.25 }}
          }
         ,
         {Text[
           Style["x", Italic, FontSize -> Scaled[.04]], {.28, 0, 0}], 
          Text[Style["y", Italic, FontSize -> Scaled[.04]], {0, 0.28, 
            0}], Text[
           Style["z", Italic, FontSize -> Scaled[.04]], {0, 0, .28}]
          }
         },
        {}
        ]
       
       }, 90 Degree, {1, 0, 0}
      ],
     PlotRange -> {{-1.3, 1.3}, {-1.4, 1.4}, {-1.4, 1.4}},
     Boxed -> False,
     ImagePadding -> .1,
     ImageMargins -> 0,
     SphericalRegion -> True,
     ViewPoint -> {4.86215, -27.5746, 5},
     If[plotStyle == 1,
      Lighting -> {{"Ambient", White}},
      Lighting -> Automatic
      ],
     ViewAngle -> 2*Pi/180,
     PreserveImageOptions -> If[reset, reset = False; False, True],
     ImageSize -> {280, 420}
     ], Antialiasing -> True]
  ],
 
 Text@Grid[{
    {Grid[{
       {Spacer[39],
        TraditionalForm@HoldForm[Subscript[\[Sigma], x]],
        Control[{{\[Sigma]xx, 0, ""}, -500, 500, 1, 
          ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Sigma]xx,
          3, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "MPa",
        Button["zero", \[Sigma]xx = 0, Appearance -> "Palette", 
         Background -> LightBlue, ImageSize -> {45, 20}],
        Spacer[47]
        },
       
       {
        Spacer[1],
        TraditionalForm@HoldForm[Subscript[\[Sigma], y]],
        Control[{{\[Sigma]yy, 0, ""}, -500, 500, 1, 
          ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Sigma]yy,
          3, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "MPa",
        Button["zero", \[Sigma]yy = 0, Appearance -> "Palette", 
         Background -> LightBlue, ImageSize -> {45, 20}],
        Spacer[1]
        },
       
       {
        Spacer[1],
        TraditionalForm@HoldForm[Subscript[\[Sigma], z]],
        Control[{{\[Sigma]zz, 0, ""}, -500, 500, 1, 
          ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Sigma]zz,
          3, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "MPa",
        Button["zero", \[Sigma]zz = 0, Appearance -> "Palette", 
         Background -> LightBlue, ImageSize -> {45, 20}],
        Spacer[1]
        },
       
       {
        Spacer[1],
        TraditionalForm@HoldForm[Subscript[\[Tau], x, y]],
        Control[{{\[Tau]xyxy, 300, ""}, -500, 500, 1, 
          ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Tau]xyxy,
          3, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "MPa",
        Button["zero", \[Tau]xyxy = 0, Appearance -> "Palette", 
         Background -> LightBlue, ImageSize -> {45, 20}], Spacer[1]
        },
       
       {
        Spacer[1],
        TraditionalForm@HoldForm[Subscript[\[Tau], y, z]],
        Control[{{\[Tau]yzyz, 0, ""}, -500, 500, 1, 
          ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Tau]yzyz,
          3, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "MPa",
        Button["zero", \[Tau]yzyz = 0, Appearance -> "Palette", 
         Background -> LightBlue, ImageSize -> {45, 20}], Spacer[1]
        },
       
       {
        Spacer[1],
        TraditionalForm@HoldForm[Subscript[\[Tau], z, x]],
        Control[{{\[Tau]zxzx, 0, ""}, -500, 500, 1, 
          ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Tau]zxzx,
          3, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "MPa",
        Button["zero", \[Tau]zxzx = 0, Appearance -> "Palette", 
         Background -> LightBlue, ImageSize -> {45, 20}], Spacer[1]
        }
       
       }, Alignment -> Left, Spacings -> {.4, .2}, Frame -> False, 
      FrameStyle -> Directive[Thickness[.005], Gray]]
     },
    
    {
     Grid[{
       {Button["reset view", reset = True, ImageSize -> {95, 28}], 
        Spacer[3], 
        Button["reset stress", \[Sigma]xx = 0; \[Sigma]yy = 
          0; \[Sigma]zz = 0; \[Tau]xyxy = 0; \[Tau]yzyz = 
          0; \[Tau]zxzx = 0, ImageSize -> {95, 28}]}
       }]
     },
    
    
    {
     Grid[{
       {Spacer[23], Style["shear strain type", 12],
        RadioButtonBar[
         Dynamic[strainType], {"cauchy" -> Style["Cauchy", 12], 
          "eng" -> Style["engineering", 12]}],
        Spacer[22]
        }
       }, Alignment -> Left, Spacings -> {.5, .5}, Frame -> False, 
      FrameStyle -> Directive[Thickness[.005], Gray]]
     },
    
    {
     Grid[{
       {
        Spacer[46],
        Style["Young's modulus E", 11],
        Control[{{ee, 90, ""}, 90, 260, 1, ImageSize -> Tiny}],
        Spacer[3],
        Dynamic@AccountingForm[ee,
          3, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        Spacer[3],
        "GPa",
        Spacer[46]
        },
       
       {
        Spacer[3],
        Style["poisson ratio \[Nu]", 11],
        Control[{{\[Nu], .3, ""}, .01, .5, .01, ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[\[Nu],
          {2, 2}, NumberSigns -> {"", ""}, 
          NumberPadding -> {"0", "0"}, SignPadding -> True],
        SpanFromLeft
        },
       
       {
        Spacer[3],
        Style["exaggeration factor", 11],
        Control[{{k, 25, ""}, 1, 35, 1, ImageSize -> Tiny}],
        Spacer[1],
        Dynamic@AccountingForm[k,
          2, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}, 
          SignPadding -> True],
        SpanFromLeft
        }
       }, Alignment -> Left, Spacings -> {0, .8}, Frame -> True, 
      FrameStyle -> Directive[Thickness[.005], Gray]
      ]
     },
    
    {
     Grid[{
       {Spacer[11], Style["stress tensor (MPa)", 11], Spacer[11]},
       {
        Style[
         Row[{Text@
            Style[TraditionalForm@
              HoldForm[{{Subscript[\[Sigma], x], Subscript[\[Tau], x, 
                 y], Subscript[\[Tau], x, z]}, {Subscript[\[Tau], y, 
                 x], Subscript[\[Sigma], y], Subscript[\[Tau], y, 
                 z]}, {Subscript[\[Tau], z, x], Subscript[\[Tau], z, 
                 y], Subscript[\[Sigma], z]}}]], " = ",
           Dynamic@TraditionalForm[{
              {AccountingForm[\[Sigma]xx,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True], 
               AccountingForm[\[Tau]xyxy,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True], 
               AccountingForm[\[Tau]zxzx,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True]
               },
              {AccountingForm[\[Tau]xyxy,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True], 
               AccountingForm[\[Sigma]yy,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True], 
               AccountingForm[\[Tau]yzyz,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True]
               },
              {AccountingForm[\[Tau]zxzx,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True], 
               AccountingForm[\[Tau]yzyz,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True], 
               AccountingForm[\[Sigma]zz,
                3, NumberSigns -> {"-", "+"}, 
                NumberPadding -> {"0", "0"}, SignPadding -> True]
               }
              }]
           }], 11], SpanFromLeft
        }
       }, Alignment -> Center, Spacings -> {6.5, .8}, Frame -> False, 
      FrameStyle -> Directive[Thickness[.005], Gray]]
     },
    
    
    {
     Grid[{
       {Style["strain tensor", 11]},
       {
        Style[Row[{Text@Style[TraditionalForm@HoldForm[{
                {Subscript[\[Epsilon], x],
                 
                 Dynamic@
                   If[strainType == "eng", Spacer[12], 
                    Style["1/2", 8]] (Subscript[\[Gamma], x, y]), 
                 Dynamic@
                   If[strainType == "eng", Spacer[12], 
                    Style["1/2", 8]] Subscript[\[Gamma], x, 
                  z]}, {Dynamic@
                   If[strainType == "eng", Spacer[12], 
                    Style["1/2", 8]] Subscript[\[Gamma], y, x], 
                 Subscript[\[Epsilon], y], 
                 Dynamic@
                   If[strainType == "eng", Spacer[12], 
                    Style["1/2", 8]] Subscript[\[Gamma], y, 
                  z]}, {Dynamic@
                   If[strainType == "eng", Spacer[12], 
                    Style["1/2", 8]] Subscript[\[Gamma], z, x], 
                 Dynamic@
                   If[strainType == "eng", Spacer[12], 
                    Style["1/2", 8]] Subscript[\[Gamma], z, y],
                 Subscript[\[Epsilon], z]}}]], " = ",
           Dynamic@TraditionalForm[{
              {padIt1[100*\[Epsilon]x, {5, 4}],
               
               padIt1[180/Pi*
                 If[strainType == "eng", \[Gamma]xy, \[Gamma]xy/
                   2], {5, 4}]^Degree,
               
               padIt1[180/Pi*\[Gamma]zx/
                  If[strainType == "eng", 1, 2], {5, 4}]^Degree
               },
              {padIt1[
                180/Pi*\[Gamma]xy/If[strainType == "eng", 1, 2], {5, 
                 4}]^Degree,
               padIt1[100*\[Epsilon]y, {5, 4}],
               
               padIt1[180/Pi*\[Gamma]yz/
                  If[strainType == "eng", 1, 2], {5, 4}]^Degree
               },
              {padIt1[
                180/Pi*\[Gamma]zx/If[strainType == "eng", 1, 2], {5, 
                 4}]^Degree,
               
               padIt1[180/Pi*\[Gamma]yz/
                  If[strainType == "eng", 1, 2], {5, 4}]^Degree,
               padIt1[100*\[Epsilon]z, {5, 4}]
               }
              }]
           }], 11]
        }
       }, Alignment -> Center, Spacings -> {0.3, 1}, Frame -> False, 
      FrameStyle -> Directive[Thickness[.005], Gray]
      ]
     },
    
    {
     Grid[{
       {
        Row[{Text@Style["show original", 12], 
          Control[{{showOriginal, True, ""}, {True, False}}]}],
        Row[{Text@Style["show axes", 12], 
          Control[{{showAxes, True, ""}, {True, False}}]}],
        Row[{Style["select 3D style", 12], 
          RadioButtonBar[Dynamic[plotStyle], {1, 2}]}]
        }
       }, Alignment -> Left, Spacings -> {1, .4}, Frame -> True, 
      FrameStyle -> Directive[Thickness[.005], Gray]
      ]
     }
    
    
    }, Alignment -> Center
   ],
 
 {{strainType, "eng"}, None},
 {{plotStyle, 2}, None},
 {{reset, False}, None},
 {{\[Epsilon]x, 0}, None},
 {{\[Epsilon]y, 0}, None},
 {{\[Epsilon]z, 0}, None},
 {{\[Gamma]xy, 0}, None},
 {{\[Gamma]yz, 0}, None},
 {{\[Gamma]zx, 0}, None},
 
 ControlPlacement -> Left,
 SynchronousUpdating -> True,
 SynchronousInitialization -> True,
 ContinuousAction -> True,
 Alignment -> Center,
 ImageMargins -> 0,
 FrameMargins -> 0,
 Paneled -> True,
 Frame -> False,
 TrackedSymbols :> {\[Sigma]xx, \[Sigma]yy, \[Sigma]zz, \[Tau]xyxy, \
\[Tau]yzyz, \[Tau]zxzx, strainType, k, ee, \[Nu], reset, showOriginal,
    showAxes, plotStyle},
 Initialization :> 
  (
   (*definitions used for parameter checking*)
   integerStrictPositive = (IntegerQ[#] && # > 0 &);
   integerPositive = (IntegerQ[#] && # >= 0 &);
   numericStrictPositive = (Element[#, Reals] && # > 0 &);
   numericPositive = (Element[#, Reals] && # >= 0 &);
   numericStrictNegative = (Element[#, Reals] && # < 0 &);
   numericNegative = (Element[#, Reals] && # <= 0 &);
   bool = (Element[#, Booleans] &);
   numeric = (Element[#, Reals] &);
   integer = (Element[#, Integers] &);
   (*--------------------------------------------*)
   padIt1[v_?numeric, f_List] := AccountingForm[v,
     f, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
     SignPadding -> True];
   (*--------------------------------------------*)
   padIt1[v_?numeric, f_Integer] := AccountingForm[Chop[v],
     f, NumberSigns -> {"-", "+"}, NumberPadding -> {"0", "0"}, 
     SignPadding -> True];
   (*--------------------------------------------*)
   padIt2[v_?numeric, f_List] := AccountingForm[v,
     f, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}, 
     SignPadding -> True];
   (*--------------------------------------------*)
   padIt2[v_?numeric, f_Integer] := AccountingForm[Chop[v],
     f, NumberSigns -> {"", ""}, NumberPadding -> {"0", "0"}, 
     SignPadding -> True];
   (*--------------------------------------------*)
   
   getCoordinates[
     strainType_String, \[Epsilon]x_?numeric, \[Epsilon]y_?
      numeric, \[Epsilon]z_?numeric, \[Gamma]xy_?numeric, \[Gamma]yz_?
      numeric, \[Gamma]zx_?numeric, k_?integerStrictPositive] := 
    Module[{p1, p2, p3, p4, p5, p6, p7, p8, a\[Tau]xy, a\[Tau]yz, 
      a\[Tau]zx},
     
     a\[Tau]xy = Sin[\[Gamma]xy/2];
     a\[Tau]yz = Sin[\[Gamma]yz/2];
     a\[Tau]zx = Sin[\[Gamma]zx/2];
     
     (*set coordinates of 8 corners of cube based on type of strain*)

     
     If[strainType == "eng",
      p1 = {-1/2 + k (-\[Epsilon]x/2 + a\[Tau]zx), -1/2 + 
         k (-\[Epsilon]y/2 - a\[Tau]xy), 
        1/2 + k (\[Epsilon]z/2 - a\[Tau]yz)};
      p2 = {1/2 + k (\[Epsilon]x/2 + a\[Tau]zx), -1/2 + 
         k (-\[Epsilon]y/2 + a\[Tau]xy), 
        1/2 + k (\[Epsilon]z/2 - a\[Tau]yz)};
      p3 = {1/2 + k (\[Epsilon]x/2 + a\[Tau]zx), 
        1/2 + k (\[Epsilon]y/2 + a\[Tau]xy), 
        1/2 + k (\[Epsilon]z/2 + a\[Tau]yz)};
      p4 = {-1/2 + k (-\[Epsilon]x/2 + a\[Tau]zx), 
        1/2 + k (\[Epsilon]y/2 - a\[Tau]xy), 
        1/2 + k (\[Epsilon]z/2 + a\[Tau]yz)};
      p5 = {-1/2 + k (-\[Epsilon]x/2 - a\[Tau]zx), -1/2 + 
         k (-\[Epsilon]y/2 - a\[Tau]xy), -1/2 + 
         k (-\[Epsilon]z/2 - a\[Tau]yz)};
      p6 = {1/2 + k (\[Epsilon]x/2 - a\[Tau]zx), -1/2 + 
         k (-\[Epsilon]y/2 + a\[Tau]xy), -1/2 + 
         k (-\[Epsilon]z/2 - a\[Tau]yz)};
      p7 = {1/2 + k (\[Epsilon]x/2 - a\[Tau]zx), 
        1/2 + k (\[Epsilon]y/2 + a\[Tau]xy), -1/2 + 
         k (-\[Epsilon]z/2 + a\[Tau]yz)};
      p8 = {-1/2 + k (-\[Epsilon]x/2 - a\[Tau]zx), 
        1/2 + k (\[Epsilon]y/2 - a\[Tau]xy), -1/2 + 
         k (-\[Epsilon]z/2 + a\[Tau]yz)}
      ,
      p1 = {-1/2 + 
         k (-\[Epsilon]x/2 - a\[Tau]xy/2 + a\[Tau]zx/2), -1/2 + 
         k (-\[Epsilon]y/2 - a\[Tau]xy/2 + a\[Tau]yz/2), 
        1/2 + k (\[Epsilon]z/2 - a\[Tau]yz/2 - a\[Tau]zx/2)};
      p2 = {1/2 + 
         k (\[Epsilon]x/2 - a\[Tau]xy/2 + a\[Tau]zx/2), -1/2 + 
         k (-\[Epsilon]y/2 + a\[Tau]xy/2 + a\[Tau]yz/2), 
        1/2 + k (\[Epsilon]z/2 - a\[Tau]yz/2 + a\[Tau]zx/2)};
      p3 = {1/2 + k (\[Epsilon]x/2 + a\[Tau]xy/2 + a\[Tau]zx/2), 
        1/2 + k (\[Epsilon]y/2 + a\[Tau]xy/2 + a\[Tau]yz/2), 
        1/2 + k (\[Epsilon]z/2 + a\[Tau]yz/2 + a\[Tau]zx/2)};
      p4 = {-1/2 + k (-\[Epsilon]x/2 + a\[Tau]xy/2 + a\[Tau]zx/2), 
        1/2 + k (\[Epsilon]y/2 - a\[Tau]xy/2 + a\[Tau]yz/2),
        1/2 + k (\[Epsilon]z/2 + a\[Tau]yz/2 - a\[Tau]zx/2)};
      p5 = {-1/2 + 
         k (-\[Epsilon]x/2 - a\[Tau]xy/2 - a\[Tau]zx/2), -1/2 + 
         k (-\[Epsilon]y/2 - a\[Tau]xy/2 - a\[Tau]yz/2),
        -1/2 + k (-\[Epsilon]z/2 - a\[Tau]yz/2 - a\[Tau]zx/2)};
      p6 = {1/2 + 
         k (\[Epsilon]x/2 - a\[Tau]xy/2 - a\[Tau]zx/2), -1/2 + 
         k (-\[Epsilon]y/2 + a\[Tau]xy/2 - a\[Tau]yz/2),
        -1/2 + k (-\[Epsilon]z/2 - a\[Tau]yz/2 + a\[Tau]zx/2)};
      p7 = {1/2 + k (\[Epsilon]x/2 + a\[Tau]xy/2 - a\[Tau]zx/2), 
        1/2 + k (\[Epsilon]y/2 + a\[Tau]xy/2 - a\[Tau]yz/2),
        -1/2 + k (-\[Epsilon]z/2 + a\[Tau]yz/2 + a\[Tau]zx/2)};
      p8 = {-1/2 + k (-\[Epsilon]x/2 + a\[Tau]xy/2 - a\[Tau]zx/2), 
        1/2 + k (\[Epsilon]y/2 - a\[Tau]xy/2 - a\[Tau]yz/2),
        -1/2 + k (-\[Epsilon]z/2 + a\[Tau]yz/2 - a\[Tau]zx/2)}
      
      ];
     
     {p1, p2, p3, p4, p5, p6, p7, p8}
     ]
   )
 
 ]