[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