[Paraview] Possible bug in vtkFunctionParser?
Berk Geveci
berk.geveci at kitware.com
Thu Mar 27 10:31:56 EDT 2008
Hi Takuya,
Can you please create an issue in the bug tracker and attach the patch there?
Thanks,
-berk
On Thu, Mar 27, 2008 at 9:41 AM, OSHIMA Takuya
<oshima at eng.niigata-u.ac.jp> wrote:
> Hi,
>
> Sorry to bother you again, but does anyone have a comment?
> This time I had a look through the bug tracker but could not find the issue.
>
> Takuya
>
> From: OSHIMA Takuya <oshima at eng.niigata-u.ac.jp>
> Date: Sat, 22 Mar 2008 14:41:17 +0900
>
>
>
> Hi,
>
> I have a dataset which contains an array with the name say "A/B,"
> which in turn contains a character that may be interpreted as a
> mathematical operator '/'. If I try to run Filter->Calculator and to
> evaluate an expression "A/B + A/B" over the dataset, I can't get the
> expected result (an array with all components doubled).
>
> I'm not sure this should be called as a bug since the array name is
> itself confusing, but anyway what I found out was that finding the
> first occurrence of the array name within the given expression is not
> enough in vtkFunctionParser::OperatorWithinVariable(). I think at
> least the array name should be searched until the location of idx even
> if there was an occurrence prior to the location.
>
> Here I attach a patch that worked for me. I know this is far from
> perfect as a fix (there are still many possible cases that can't be
> properly detected). Please take it just as a clarification of a
> solution that worked for me.
>
> Regards,
> Takuya
>
> --- vtkFunctionParser.cxx.orig 2007-12-22 03:55:56.000000000 +0900
> +++ vtkFunctionParser.cxx 2008-03-22 12:26:51.320000000 +0900
> @@ -1342,14 +1342,21 @@
> {
> if (strchr(this->ScalarVariableNames[i], this->Function[idx]) != 0)
> {
> - tmpString = strstr(this->Function, this->ScalarVariableNames[i]);
> - if (tmpString)
> + for(end = 0; end <= idx;)
> {
> - start = static_cast<int>(tmpString - this->Function);
> - end = start + strlen(this->ScalarVariableNames[i]);
> - if (start <= idx && end >= idx)
> + tmpString = strstr(this->Function + end, this->ScalarVariableNames[i]);
> + if (tmpString)
> {
> - return 1;
> + start = static_cast<int>(tmpString - this->Function);
> + end = start + strlen(this->ScalarVariableNames[i]);
> + if (start <= idx && end > idx)
> + {
> + return 1;
> + }
> + }
> + else
> + {
> + break;
> }
> }
> }
> @@ -1358,14 +1365,21 @@
> {
> if (strchr(this->VectorVariableNames[i], this->Function[idx]) != 0)
> {
> - tmpString = strstr(this->Function, this->VectorVariableNames[i]);
> - if (tmpString)
> + for(end = 0; end <= idx;)
> {
> - start = static_cast<int>(tmpString - this->Function);
> - end = start + strlen(this->VectorVariableNames[i]);
> - if (start <= idx && end >= idx)
> + tmpString = strstr(this->Function + end, this->VectorVariableNames[i]);
> + if (tmpString)
> + {
> + start = static_cast<int>(tmpString - this->Function);
> + end = start + strlen(this->VectorVariableNames[i]);
> + if (start <= idx && end > idx)
> + {
> + return 1;
> + }
> + }
> + else
> {
> - return 1;
> + break;
> }
> }
> }
> _______________________________________________
> ParaView mailing list
> ParaView at paraview.org
> http://www.paraview.org/mailman/listinfo/paraview
>
More information about the ParaView
mailing list