-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathaccordion3.py
More file actions
46 lines (39 loc) · 2.41 KB
/
Copy pathaccordion3.py
File metadata and controls
46 lines (39 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import os
path = os.path.dirname(os.path.abspath(__file__))+'/../mesh/'
def addAccordion(node, inverse=False):
accordion = node.addChild('accordion')
accordion.addObject('EulerImplicitIntegrationScheme', firstOrder=False, rayleighStiffness=0.1, rayleighMass=0.1)
accordion.addObject('SparseLDLSolver')
accordion.addObject('MeshVTKLoader', name='loader', filename=path+'Springy.vtk')
accordion.addObject('MeshTopology', src='@loader')
accordion.addObject('MechanicalObject', name='tetras', template='Vec3')
accordion.addObject('UniformMass', totalMass=0.030)
accordion.addObject('TetrahedronFEMForceField', template='Vec3', name='FEM', method='large', poissonRatio=0.3, youngModulus=500)
accordion.addObject('BoxROI', name='ROI1', box=[-2, -2, 0, 2, 2, 0.5], drawBoxes=True)
accordion.addObject('RestShapeSpringsForceField', points='@ROI1.indices', stiffness=1e12)
accordion.addObject('LinearSolverConstraintCorrection')
# Pressure
cavity = accordion.addChild('cavity')
cavity.addObject('MeshSTLLoader', name='loader', filename=path+'Springy_Cavity.stl')
cavity.addObject('MeshTopology', src='@loader')
cavity.addObject('MechanicalObject', name='cavity')
cavity.addObject('SurfacePressureActuator' if inverse else 'SurfacePressureConstraint', template='Vec3', name="pressure")
cavity.addObject('BarycentricMapping', name='mapping', mapForces=False, mapMasses=False)
# Cables
cables = accordion.addChild('cables')
cables.addObject('MechanicalObject', name="cablesPoint",
position=[[1.5, 0, 0.5+i] for i in range(5)]
+[[0, -1.5, 0.5+i] for i in range(5)]
+[[-1.5, 0, 0.5+i] for i in range(5)])
for i in range(3):
cables.addObject('CableActuator' if inverse else 'CableConstraint', template='Vec3',
name="cable"+str(i+1),
indices=list(range(i*5,5*(i+1))),
pullPoint=[[1.5, 0, 0],[0, -1.5, 0],[-1.5, 0, 0]][i])
cables.addObject('BarycentricMapping', mapForces=False, mapMasses=False)
# Visualization
accordionVisu = accordion.addChild('visu')
accordionVisu.addObject('MeshSTLLoader', filename=path+"Springy.stl", name="loader")
accordionVisu.addObject('OglModel', src="@loader", color=[0.4, 0.4, 0.4, 0.5])
accordionVisu.addObject('BarycentricMapping')
return accordion