Calculate a scalp to scalp distance

I am so bad about the result.
When I change the “name of your data”,“Name” or both of them,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

Looking forward to your reply!
Thanks!
doc-xie

What do you obtain after write
model
in your interactor?

import sys, slicer, numpy, os, math, vtk

model = getNode(‘kk’) #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()
File “”, line 8
pd = model.GetModelDisplayNode()
^
SyntaxError: invalid syntax
pd1=pd.GetOutputPolyData()
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘pd’ is not defined
pd1.GetNumberOfPoints()
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘pd1’ is not defined
loc = vtk.vtkPointLocator()
loc.SetDataSet(pd1)
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘pd1’ is not defined
loc.BuildLocator()
closestPointId = loc.FindClosestPoint(list[0]) #point1
Traceback (most recent call last):
File “”, line 1, in
IndexError: list index out of range
closestPointId1 = loc.FindClosestPoint(list[1]) #point2
Traceback (most recent call last):
File “”, line 1, in
IndexError: list index out of range
closestPointId2 = loc.FindClosestPoint(list[2]) #point3
Traceback (most recent call last):
File “”, line 1, in
IndexError: list index out of range

#get the distance of the geodesic path
appendFilter = vtk.vtkAppendFilter()
appendFilter.MergePointsOn()
points = vtk.vtkPoints()

vIds = [closestPointId,closestPointId1,closestPointId2]
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘closestPointId’ is not defined
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())

Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘vIds’ is not defined
print 'length= ', dist/10 ,‘cm’
length= 0.0 cm

The result just like 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

Dose the code should be changed include “name of your data” and “Name”?
Best wishes!
doc-xie

the error is here:
#create locator
… pd = model.GetModelDisplayNode()

The indentation is bad.
Stop after each loop, press “enter key” and copy/past the rest of the code.

Cf. paint

I cannot understand your meaning precisely.
How many and which code should be changed in total?
Would you like show us the step in details?
How to stop the loop?
Or can you release the changed code?
Because the problem confused me for a long tine.
Thank you very much!
doc-xie

The code is the same.
Just copy it step by step.

But I got the same result,what is the reason?

Do you have draw 3 fiducials points on your bones?

Yes,I set three fiducial points on the surface of the bone model.
Is there any other code should be changed?
Thanks for your quick answer!
doc-xie

Please, could you send me, a picture with:
Your model + your 3 points + the code in the python interactor.
Thx

My model is bone,and the three Fiducial points locate on the surface of the bone.
The code with the changed name of the bone is in the following picture!
无标题|690x387

Hi,
I don’t see your picture, the link is break.

Hello,Frederic!
The picture show the model,Fiducial pionts and the changed code.
Is there any mistake with it?

Thanks a lot!
doc-xie

It seems good.
Write the code until 'list.append(ras)'
Then, say me what do you obtain in list.
(write list in interactor).

The result is:
0 : RAS = [-64.88647044483935, 31.38609213676277, 22.4068165428881]
1 : RAS = [-67.15588955489847, 15.631492316231501, -7.362209206466714]
2 : RAS = [-69.599602782564, -17.377627328452363, -16.836592046659394]

Perfect. Now write the code until the loop. What do you obtain for the ClosestPointId, ClosestPointId1, ClosestPointId2?

There are some mistakes with these code:
File “”, line 8
pd = model.GetModelDisplayNode()
^
SyntaxError: invalid syntax

pd1=pd.GetOutputPolyData()
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘pd’ is not defined
pd1.GetNumberOfPoints()
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘pd1’ is not defined
loc = vtk.vtkPointLocator()
loc.SetDataSet(pd1)
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘pd1’ is not defined
loc.BuildLocator()
closestPointId = loc.FindClosestPoint(list[0]) #point1
Traceback (most recent call last):
File “”, line 1, in
IndexError: list index out of range
closestPointId1 = loc.FindClosestPoint(list[1]) #point2
Traceback (most recent call last):
File “”, line 1, in
IndexError: list index out of range
closestPointId2 = loc.FindClosestPoint(list[2]) #point3

Please, could you send me your model (bones)?