Skip to content

Instantly share code, notes, and snippets.

@zbounik
Last active June 17, 2019 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zbounik/569971d696522a2b5b4088888a535dd0 to your computer and use it in GitHub Desktop.
Save zbounik/569971d696522a2b5b4088888a535dd0 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 12 06:25:00 2018
@author: zahra
"""
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 28 07:57:15 2018
@author: zahra
"""
import Sofa
import numpy as np
#import os
#import os
#from time import gmtime, strftime
class controller(Sofa.PythonScriptController):
def initGraph(self, node):
self.rootNode = node
self.Liver= node.getChild('Liver')
self.surface_fine= self.Liver.getChild('surface_fine')
self.visu_surface_fine=self.surface_fine.getChild('visu_surface_fine')
self.coarse = self.Liver.getChild('coarse')
self.surface_coarse= self.coarse.getChild('surface_coarse')
self.visu_surface_coarse= self.surface_coarse.getChild('visu_surface_coarse')
# self.mainNode = 2;
# self.notYetDone=True
self.totalTime = 0
self.ind1=0
self.ind2=0
def onBeginAnimationStep(self,dt):
self.totalTime+=dt
i=[[0,-10,0],[0,-20,0]]
j=[88]
iLen=len(i)
jLen=len(j)
restTime=0.5
if self.totalTime<=restTime+dt:
# for i in range(-200,-99, 100):
# for j in [111,84]:
############# reset mesh exporter
######## reset mesh exporter for liver volume fine
self.Liver.getObject('meshExporter0').findData('exportEveryNumberOfSteps').value='1'
self.Liver.getObject('meshExporter0').findData('exportAtEnd').value='1'
self.Liver.getObject('meshExporter0').findData('exportAtBegin').value='0'
######## reset mesh exporter for liver surface fine
self.surface_fine.getObject('meshExporter1').findData('exportEveryNumberOfSteps').value='1'
self.surface_fine.getObject('meshExporter1').findData('exportAtEnd').value='1'
self.surface_fine.getObject('meshExporter1').findData('exportAtBegin').value='0'
######## reset mesh exporter for liver volume coarse
self.coarse.getObject('meshExporter2').findData('exportEveryNumberOfSteps').value='1'
self.coarse.getObject('meshExporter2').findData('exportAtEnd').value='1'
self.coarse.getObject('meshExporter2').findData('exportAtBegin').value='0'
######## reset mesh exporter for liver surface coarse
self.surface_coarse.getObject('meshExporter3').findData('exportEveryNumberOfSteps').value='1'
self.surface_coarse.getObject('meshExporter3').findData('exportAtEnd').value='1'
self.surface_coarse.getObject('meshExporter3').findData('exportAtBegin').value='0'
######## reset objExporter for liver visual surface fine
self.visu_surface_fine.getObject('oBJExporter1').findData('exportEveryNumberOfSteps').value='1'
self.visu_surface_fine.getObject('oBJExporter1').findData('exportAtEnd').value='1'
self.visu_surface_fine.getObject('oBJExporter1').findData('exportAtBegin').value='0'
######## reset objExporter for liver visual surface coarse
self.visu_surface_coarse.getObject('oBJExporter2').findData('exportEveryNumberOfSteps').value='1'
self.visu_surface_coarse.getObject('oBJExporter2').findData('exportAtEnd').value='1'
self.visu_surface_coarse.getObject('oBJExporter2').findData('exportAtBegin').value='0'
self.Liver.getObject('constantFF0').findData('forces').value=[i[self.ind1]]
self.Liver.getObject('constantFF0').findData('indices').value=[j[self.ind2]]
self.Liver.getObject('meshExporter0').findData('filename').value='/home/zahra/sofa/Work/Exported/Fine_volume/LiverVolumeFine_'+str(j[self.ind2])+'_'+str(i[self.ind1])
self.surface_fine.getObject('meshExporter1').findData('filename').value='/home/zahra/sofa/Work/Exported/Fine_surface/LiverSurfaceFine_'+str(j[self.ind2])+'_'+str(i[self.ind1])
self.coarse.getObject('meshExporter2').findData('filename').value='/home/zahra/sofa/Work/Exported/Coarse_volume/LiverVolumeCoarse_'+str(j[self.ind2])+'_'+str(i[self.ind1])
self.surface_coarse.getObject('meshExporter3').findData('filename').value='/home/zahra/sofa/Work/Exported/Coarse_surface/LiverSurfaceCoarse_'+str(j[self.ind2])+'_'+str(i[self.ind1])
######## exporting the visaul OBJs
self.visu_surface_fine.getObject('oBJExporter1').findData('filename').value='/home/zahra/sofa/Work/Exported/Fine_surface/LiverVisuSurfaceFine_'+str(j[self.ind2])+'_'+str(i[self.ind1])
self.visu_surface_coarse.getObject('oBJExporter2').findData('filename').value='/home/zahra/sofa/Work/Exported/Coarse_surface/LiverVisuSurfaceCoarse_'+str(j[self.ind2])+'_'+str(i[self.ind1])
print(self.totalTime)
print(i[self.ind1],(i[self.ind1][0]**2+i[self.ind1][1]**2+i[self.ind1][2]**2)**0.5, j[self.ind2])
############# Reset the deformation for the next i and j #################################################################
if (self.totalTime>restTime):
# self.rootNode.animate='False'
print(self.totalTime)
# print(i,j,'end')
############ stop extracting, if not, it overwrites the exported meshes
self.Liver.getObject('meshExporter0').findData('exportEveryNumberOfSteps').value='0'
self.Liver.getObject('meshExporter0').findData('exportAtEnd').value='0'
self.Liver.getObject('meshExporter0').findData('exportAtBegin').value='0'
self.surface_fine.getObject('meshExporter1').findData('exportEveryNumberOfSteps').value='0'
self.surface_fine.getObject('meshExporter1').findData('exportAtEnd').value='0'
self.surface_fine.getObject('meshExporter1').findData('exportAtBegin').value='0'
self.coarse.getObject('meshExporter2').findData('exportEveryNumberOfSteps').value='0'
self.coarse.getObject('meshExporter2').findData('exportAtEnd').value='0'
self.coarse.getObject('meshExporter2').findData('exportAtBegin').value='0'
self.surface_coarse.getObject('meshExporter3').findData('exportEveryNumberOfSteps').value='0'
self.surface_coarse.getObject('meshExporter3').findData('exportAtEnd').value='0'
self.surface_coarse.getObject('meshExporter3').findData('exportAtBegin').value='0'
self.visu_surface_fine.getObject('oBJExporter1').findData('exportEveryNumberOfSteps').value='0'
self.visu_surface_fine.getObject('oBJExporter1').findData('exportAtBegin').value='0'
self.visu_surface_fine.getObject('oBJExporter1').findData('exportAtEnd').value='0'
self.visu_surface_coarse.getObject('oBJExporter2').findData('exportEveryNumberOfSteps').value='0'
self.visu_surface_coarse.getObject('oBJExporter2').findData('exportAtBegin').value='0'
self.visu_surface_coarse.getObject('oBJExporter2').findData('exportAtEnd').value='0'
############ reseting the state vectors of the MechanicalObject (position, velocity, force, constraint ..) and all other classes to reset the scene when the mesh reaches to its steady state
############ https://www.sofa-framework.org/community/forum/topic/scene-reset-in-sofa-python/
self.Liver.getObject('dofs').findData('position').value='@loader.position'
self.Liver.getObject('dofs').findData('force').value='0 0 0'
self.Liver.getObject('dofs').findData('velocity').value='0 0 0'
self.Liver.getObject('dofs').findData('externalForce').value='0 0 0'
self.coarse.getObject('mObject0').findData('position').value='@meshGmshLoader1.position'
self.coarse.getObject('mObject0').findData('force').value='0 0 0'
self.coarse.getObject('mObject0').findData('velocity').value='0 0 0'
self.coarse.getObject('mObject0').findData('externalForce').value='0 0 0'
# ######## changing the applied force
# self.Liver.getObject('constantFF0').findData('forces').value=[0, 0, 0]
########## changing the indice of the applied force
## self.Liver.getObject('constantFF0').findData('indices').value=[j[self.ind2]]
self.totalTime=0
self.ind2=self.ind2+1
if self.ind2==jLen:
if self.ind1!=iLen-1:
self.ind1+=1
self.ind2=0
else: # if all the changes are applied
self.rootNode.animate='False'
print('End')
return 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment