Last active
June 17, 2019 13:39
-
-
Save zbounik/569971d696522a2b5b4088888a535dd0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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