[vtk-developers] chaining vtk Set... methods

David Gobbi david.gobbi at gmail.com
Fri Jan 29 11:57:31 EST 2010


On Fri, Jan 29, 2010 at 9:20 AM, David Doria <daviddoria+vtk at gmail.com> wrote:
> On Fri, Jan 29, 2010 at 10:45 AM, Michael Halle <mhalle at bwh.harvard.edu> wrote:
>> All this talk of vtkNew and vtkSmartPointer has got me thinking.
>>
>> One of the elements of VTK syntax that has always bothered me is the
>> redundancy of multiple "object->SetXXX();" method calls in typical
>> applications.  You end up with a long list of "object->Set...;" lines.  That
>> quite redundant. It's also error prone, since cutting and pasting code might
>> result in an "object2->..." being added when "object->..." was intended.
>>
>> The fix, as far as I know, is actually relatively simple (if not highly
>> pervasive): change the return value of SetXXX() methods to be "this".
>>
>> I don't know why I didn't think about it years ago, when the change would
>> not have been as major.
>>
>> // Compare (old way):
>>
>>  vtkProperty *property = vtkProperty::New();
>>  property->SetColor(1.0, 1.0, 1.0);
>>  property->SetDiffuse(0.7);
>>  property->SetSpecular(0.4);
>>  property->SetSpecularPower(20);
>>
>> // new way:
>>
>>  vtkNew<vtkProperty> property;  // or old-style New() call
>>  property->
>>    SetColor(1.0, 1.0, 1.0)->
>>    SetDiffuse(0.7)->
>>    SetSpecular(0.4)->
>>    SetSpecularPower(20);
>>
>> // or
>>  actor->GetProperty()->
>>    SetColor(1.0, 1.0, 1.0)->
>>    SetDiffuse(0.7)->
>>    SetSpecular(0.4)->
>>    SetSpecularPower(20);
>>
>>
>> I believe the change to be backwards compatible (since SetXXX methods
>> invariably return "void" now), and also compatible with the scripting
>> wrappers.  You get natural indentation, reduced verbosity without loss of
>> clarity, and the ability to pick and choose between old and new syntax.
>>
>> Perhaps I missed a discussion about this idea sometime in the history of
>> VTK, but are there technical downsides to this scheme?  The only major
>> problem I see is that the new calling syntax can't be used with unmodified
>> third party libraries that still return void instead of "this".
>>
>> Insane?
>>
>> --Mike
>
> There was a brief discussion of this here:
>
> http://vtk.uservoice.com/forums/31508-general/suggestions/361302-declarative-api?ref=title
>
> It seems reasonable to me. Those who think it will make debugging
> harder as Francois mentioned can simply use the old method, right?
> There shouldn't be any loss in debugging ability when you are simply
> calling Set functions that set a variable (vtkSetMacro). Maybe you
> should just not use this new method for Set functions which actually
> contain code.
>
> Thanks,
>
> David

I do like the idea, and I don't think it would cause much trouble with
debugging, but I'm against it unless it could be made universal.
There would be nothing worse than having a trick like this that works
for some Set methods, but not for others.  It would cause much banging
of heads on desks.

   David G



More information about the vtk-developers mailing list