"""Simple example to calculate three stacked cubes"""fromcompas.datastructuresimportMeshfromcompas.geometryimportBoxfromcompas.geometryimportFramefromcompas.geometryimportTranslationfromcompas_assembly.datastructuresimportBlockfromcompas_cra.datastructuresimportCRA_Assemblyfromcompas_cra.equilibriumimportcra_solvefromcompas_cra.viewersimportcra_viewdeg=20# rotation angle in degreerotate_axis=[0,1,0]# around y-axissupport=Box(Frame.worldXY(),1,1,1)free1=Box(Frame.worldXY().transformed(Translation.from_vector([0,0,1])),1,1,1)free2=Box(Frame.worldXY().transformed(Translation.from_vector([0,0,2])),1,1,1)assembly=CRA_Assembly()assembly.add_block(Block.from_shape(support),node=0)assembly.add_block(Block.from_shape(free1),node=1)assembly.add_block(Block.from_shape(free2),node=2)assembly.set_boundary_conditions([0])interface1=Mesh()corners=[[0.5,0.5,0.5],[-0.5,0.5,0.5],[-0.5,-0.5,0.5],[0.5,-0.5,0.5]]fori,cinenumerate(corners):interface1.add_vertex(key=i,x=c[0],y=c[1],z=c[2])interface1.add_face([0,1,2,3])interface2=Mesh()corners=[[0.5,0.5,1.5],[-0.5,0.5,1.5],[-0.5,-0.5,1.5],[0.5,-0.5,1.5]]fori,cinenumerate(corners):interface2.add_vertex(key=i,x=c[0],y=c[1],z=c[2])interface2.add_face([0,1,2,3])assembly.add_interfaces_from_meshes([interface1],0,1)assembly.add_interfaces_from_meshes([interface2],1,2)assembly.rotate_assembly([0,0,0],rotate_axis,deg)cra_solve(assembly,verbose=True,timer=True)cra_view(assembly,resultant=False,nodal=True,grid=True,displacements=True,dispscale=10)