OK! Sure!
How can I send it to you?
Would you like tell me about your e-mail?
Best wishes!
doc-xie
By WeTransfer? Dropbox? And you give me the link after.
Best
link:https://pan.baidu.com/s/1kVjAtc7
passwords:1bhl
Thanks for your nmrl data, but I have need of you bone.vtk please.
Link:https://pan.baidu.com/s/1c2HE9Vy
passwords:k1xq
Good job!
But after I load the bone.stl into 3D Slicer and paste the code with the name of the model changed by “bone”,the result is the same as before:
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘vIds’ is not defined
print 'length= ', dist/10 ,‘cm’
length= 0.0 cm
What is the reason about this?
Thanks a lot!
dox-xie
Once again, I think that is an indentation problem.
copy the code one line by one line.
Are there a module to run this code automatically.
I deleted all space and repeated, the errors occurred again.
Could you send me this code with no indentation, so I can copy it in the same time.
No module yet, but I hope to make one later.
The code with no indentation:
import sys, slicer, numpy, os, math, vtk
model = getNode('name_of_your_data.vtk') #Go to Data module and see the name of your model, "Name"
#Access to Fiducial Properties (to determinate the start and the end point of the geodesic path)
fidList = slicer.util.getNode('F')
numFids = fidList.GetNumberOfFiducials()
list=[]
for i in range(numFids):
ras = [0,0,0]
fidList.GetNthFiducialPosition(i,ras)
print i,": RAS =",ras
list.append(ras)
#create locator
pd = model.GetModelDisplayNode()
pd1=pd.GetOutputPolyData()
pd1.GetNumberOfPoints()
loc = vtk.vtkPointLocator()
loc.SetDataSet(pd1)
loc.BuildLocator()
closestPointId = loc.FindClosestPoint(list[0]) #point1
closestPointId1 = loc.FindClosestPoint(list[1]) #point2
closestPointId2 = loc.FindClosestPoint(list[2]) #point3
#get the distance of the geodesic path
appendFilter = vtk.vtkAppendFilter()
appendFilter.MergePointsOn()
points = vtk.vtkPoints()
vIds = [closestPointId,closestPointId1,closestPointId2]
p0 = [0,0,0]
p1 = [0,0,0]
dist = 0.0
for n in range(len(vIds)-1):
v0 = vIds[n]
v1 = vIds[n+1]
#create geodesic path: vtkDijkstraGraphGeodesicPath
dijkstra = vtk.vtkDijkstraGraphGeodesicPath()
dijkstra.SetInputConnection(pd.GetOutputPolyDataConnection())
dijkstra.SetStartVertex(v0)
dijkstra.SetEndVertex(v1)
dijkstra.Update()
pts = dijkstra.GetOutput().GetPoints()
end = n<len(vIds)-2 and 0 or -1
for ptId in range(pts.GetNumberOfPoints()-1, end, -1):
pts.GetPoint(ptId, p0)
points.InsertNextPoint(p0)
for ptId in range(pts.GetNumberOfPoints()-1):
pts.GetPoint(ptId, p0)
pts.GetPoint(ptId+1, p1)
dist += math.sqrt(vtk.vtkMath.Distance2BetweenPoints(p0, p1))
appendFilter.AddInputConnection(dijkstra.GetOutputPort())
print 'length= ', dist/10 ,'cm'