Hi Ben,
when you're using scripts directly, i.e. not "driven" by PypeS, the default
readers and writers are not available at the individual script level, since
these are managed by PypeS itself.
This translates into the fact that you can't pass a filename to a script
expecting that it will be picked up by a reader. You have to first instantiate
a vmtkSurfaceReader script, pass the filename to it, execute, get the surface
object and set it to the Surface variable of the vmtkCenterlines script. Same
thing for the outputs that have to be written.
It's actually quite straightforward once you know it, but let me know if you
need further leads.
Best regards
Luca
On Jan 24, 2012, at 6:14 PM, "Berkowitz, Benjamin M"
<benjamin-berkow...@uiowa.edu> wrote:
> Thanks Luca, that is very helpful, it clears up a lot of things for me.
> After thinking about it I went back to writing a python script rather than a
> VMTK module in order to simplify things for now. However, I'm now having
> trouble running the vmtkscripts from within python. Here is the python code:
>
> # -*- coding: utf-8 -*-
> #!/usr/bin/env python
>
> import vtk
> import sys
> import math
> import string
>
> from vmtk import pypes
> from vmtk import vmtkscripts
>
> print sys.argv[1]+'\n'
> print sys.argv[2]+'\n'
>
> getForwardCenterlines = vmtkscripts.vmtkCenterlines()
> inputSurfaceName = sys.argv[1]
> print 'Input surface filename is '+inputSurfaceName+'\n'
> print 'Centerline output filename is
> '+inputSurfaceName[:-4]+'_ForwardCenterlines.vtp\n'
> getForwardCenterlines.SurfaceInputFileName = inputSurfaceName
> getForwardCenterlines.CenterlinesOutputFileName =
> inputSurfaceName[:-4]+'_ForwardCenterlines.vtp'
> getForwardCenterlines.VoronoiDiagramOutputFileName =
> inputSurfaceName[:-4]+'_VoronoiDiagram.vtp'
> getForwardCenterlines.ResamplingStepLength = 0.1
> print 'FORWARD CENTERLINES:\n\
> Source seed: Inflow\n\
> First target seed: Aneurysm dome\n\
> Second target seed(s): Outflow.'
> getForwardCenterlines.Execute()
>
> and here is the terminal output:
>
> d-###### :VMTK Programming$ python bjr_aneurysm_isolation.py 1004.vtp
> 1004finished.vtp
> 1004.vtp
>
> 1004finished.vtp
>
> Input surface filename is 1004.vtp
>
> Centerline output filename is 1004_ForwardCenterlines.vtp
>
> FORWARD CENTERLINES:
> Source seed: Inflow
> First target seed: Aneurysm dome
> Second target seed(s): Outflow.
> Error: No input surface.
>
>
>
> From: Luca Antiga [luca.ant...@orobix.com]
> Sent: Saturday, January 21, 2012 12:25 PM
> To: Berkowitz, Benjamin M
> Cc: vmtk-users@lists.sourceforge.net
> Subject: Re: [vmtk-users] Script doesn't work
>
> Hi Ben,
> a few hints to get you going
>
> - there's a mix of tabs and spaces in your python file, I suggest you either
> stick with tabs or spaces, otherwise errors could creep in
>
> - there's no need of adding SurfaceInputFileName and SurfaceOutputFileName:
> whenever you add the name of a script after the documentation
> like the 'vmtksurfacereader' in the next line
> ['Surface','i','vtkPolyData',1,'','the input surface','vmtksurfacereader'],
> pypes automatically adds an -ifile option and uses vmtksurfacereader as a
> default reader. Same thing for the writer.
> For the same reason, you can safely delete the last portion of your code:
> self.WriteSurface = vmtkscripts.vmtkSurfaceWriter ...
> since the output file will automatically be written as soon as you use -ofile
> at the command line.
>
> - whenever you instantiate a script, like
>
> self.BranchClipper = vmtkscripts.vmtkBranchClipper
>
> you have to add '()' at the end, otherwise you're not actually creating an
> instance of the object (look it up on your Python reference, book or
> tutorials), this way
>
> self.BranchClipper = vmtkscripts.vmtkBranchClipper()
>
> - I'm not sure what you wanted to achieve with
>
> for i in self.ExtractedBranches.GroupIdsArrayName:
> if branchString == self.ExtractedBranches.GroupIdsArrayName:
> branchString = None
> return branchString
>
> but this is probably not the right way
> (self.ExtractedBranches.GroupIdsArrayName is not a collection, it's a string,
> so iterating over a string will only get you one letter of the string at a
> time)
>
> - I see you are using 'self' inside a method call for a method that has self
> as the only parameter (def BranchInput(self):)
>
> while self.BranchNumber == None:
> self.BranchNumber = self.BranchInput(self)
> if self.BranchNumber == None:
> ...
>
> This is not syntactically correct, it should have been
> self.BranchInput()
>
> to make the long story short, when you write object methods in Python, the
> first argument to the method (self, but you can actually call it whatever you
> want) represents the object instance on which you're calling that method and
> does not have to be specified in the call, e.g.
>
> class Foo(object):
> def add(self, a, b):
> return a + b
>
> foo = Foo()
> foo.add(1,2)
> -> 3
>
> You'll find it in your Python refs.
>
> Hope this helps
>
>
> Luca
>
>
>
> On Jan 20, 2012, at 11:34 PM, Berkowitz, Benjamin M wrote:
>
>> Hi, I've been trying to make a python script that takes in models of vessels
>> with cerebral aneurysms and will eventually give the user an isolated
>> aneurysm. Basically, the script is pretty simple and does almost the same
>> thing as typing these commands into pypepad, but asks the user for the
>> number of the centerline tract to construct around instead of
>> vmtkcenterlinelabeler:
>>
>> vmtksurfacereader -ifile surface1.vtp --pipe vmtkcenterlines --pipe
>> vmtkbranchextractor --pipe vmtkcenterlinelabeler --pipe vmtkbranchclipper
>> -groupids 2 -ofile surface.vtp --pipe vmtkrenderer --pipe vmtksurfaceviewer
>> --pipe vmtksurfaceviewer -ifile
>> /var/tmp/bberkowi/BIOMOST/Coil_Compaction_Growth_Project/Ben_B_auto_aneurysm_cutting/Recur_pt2_pre1L.vtp
>> -opacity 0.5
>>
>> It doesn't work, though. I've just started to learn how to program with
>> Python and PypeS, so I was hoping someone could take a quick look at it and
>> tell me if I'm on the right track and if you see any glaring errors. I've
>> attached the file.
>>
>> Thanks,
>> Ben Berkowitz
>> <isolateaneurysm.py>------------------------------------------------------------------------------
>> Try before you buy = See our experts in action!
>> The most comprehensive online learning library for Microsoft developers
>> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
>> Metro Style Apps, more. Free future releases when you subscribe now!
>> http://p.sf.net/sfu/learndevnow-dev2_______________________________________________
>> vmtk-users mailing list
>> vmtk-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/vmtk-users
>
> ------------------------------------------------------------------------------
> Keep Your Developer Skills Current with LearnDevNow!
> The most comprehensive online learning library for Microsoft developers
> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
> Metro Style Apps, more. Free future releases when you subscribe now!
> http://p.sf.net/sfu/learndevnow-d2d
> _______________________________________________
> vmtk-users mailing list
> vmtk-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/vmtk-users
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
vmtk-users mailing list
vmtk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vmtk-users