Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Christian Butz
VTK
Commits
ba112e82
Commit
ba112e82
authored
Jul 26, 2013
by
David Gobbi
Committed by
Code Review
Jul 26, 2013
Browse files
Merge topic 'transform_reference_counting_bug' into master
b47332bb
Fixed reference counting bug in vtkTransform
parents
304b6e7f
b47332bb
Changes
4
Hide whitespace changes
Inline
Side-by-side
Common/Transforms/Testing/Cxx/CMakeLists.txt
0 → 100644
View file @
ba112e82
vtk_add_test_cxx
(
NO_DATA NO_VALID NO_OUTPUT
TestTransform.cxx
)
vtk_test_cxx_executable
(
${
vtk-module
}
CxxTests
)
Common/Transforms/Testing/Cxx/TestTransform.cxx
0 → 100644
View file @
ba112e82
/*=========================================================================
Program: Visualization Toolkit
Module: TestTransform.cxx
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include
<iostream>
#include
"vtkTransform.h"
#include
"vtkSmartPointer.h"
// forward declare test subroutines
int
testUseOfInverse
();
int
TestTransform
(
int
,
char
*
[])
{
int
numErrors
=
0
;
numErrors
+=
testUseOfInverse
();
return
(
numErrors
>
0
)
?
1
:
0
;
}
// This is a regression test for a bug where th following code produced
// a segfault. As long as this code does not produce a segfault,
// consider it to have passed the test.
int
testUseOfInverse
()
{
vtkSmartPointer
<
vtkTransform
>
trans1
=
vtkSmartPointer
<
vtkTransform
>::
New
();
vtkSmartPointer
<
vtkTransform
>
trans2
=
vtkSmartPointer
<
vtkTransform
>::
New
();
vtkSmartPointer
<
vtkTransform
>
trans3
=
vtkSmartPointer
<
vtkTransform
>::
New
();
trans1
->
Identity
();
trans2
->
Identity
();
trans2
->
PostMultiply
();
trans3
->
Identity
();
double
a
[]
=
{
3
,
4
,
5
},
b
[
3
];
// get inverses for 2 and 3
vtkSmartPointer
<
vtkLinearTransform
>
inv2
=
trans2
->
GetLinearInverse
();
vtkSmartPointer
<
vtkLinearTransform
>
inv3
=
trans3
->
GetLinearInverse
();
for
(
int
i
=
0
;
i
<
30
;
i
++
)
{
// make the transform something easy
trans2
->
Translate
(
a
);
trans2
->
RotateX
(
4
);
trans2
->
RotateY
(
i
%
90
);
// transform some stuff
inv2
->
TransformVector
(
a
,
b
);
inv2
->
TransformPoint
(
a
,
b
);
// build a transform with concatenations including an inverse
trans2
->
Identity
();
trans2
->
Concatenate
(
trans1
);
trans2
->
Concatenate
(
inv3
);
// transform some stuff
inv2
->
TransformVector
(
a
,
b
);
inv2
->
TransformPoint
(
a
,
b
);
// print i
trans2
->
Identity
();
std
::
cout
<<
"Iteration: "
<<
i
<<
" Reference Count: "
<<
inv3
->
GetReferenceCount
()
<<
std
::
endl
;
}
return
0
;
}
Common/Transforms/module.cmake
View file @
ba112e82
...
...
@@ -7,4 +7,6 @@ vtk_module(vtkCommonTransforms
# of vtkCommonMath off but still satisfy API dependcy.
vtkCommonCore
vtkCommonMath
TEST_DEPENDS
vtkTestingCore
)
Common/Transforms/vtkAbstractTransform.cxx
View file @
ba112e82
...
...
@@ -866,10 +866,12 @@ void vtkTransformConcatenation::DeepCopy(vtkTransformConcatenation *concat)
if
(
this
->
TransformList
[
i
].
ForwardTransform
)
{
this
->
TransformList
[
i
].
ForwardTransform
->
Delete
();
this
->
TransformList
[
i
].
ForwardTransform
=
NULL
;
}
if
(
this
->
TransformList
[
i
].
InverseTransform
)
{
this
->
TransformList
[
i
].
InverseTransform
->
Delete
();
this
->
TransformList
[
i
].
InverseTransform
=
NULL
;
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment