<div class="gmail_quote">On Mon, Feb 8, 2010 at 5:17 PM, Banksie <span dir="ltr"><<a href="mailto:banks@wai.com">banks@wai.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Hi again,<br>
<br>
I'm a lot closer than I was, but I'm getting something a bit strange. When I<br>
apply symmetry to one axis, everything works fine, but when I move to having<br>
two axes with symmetry, I get a Seg Fault when it comes to the<br>
<br>
pRenderer->GetRenderWindow->Render();<br>
<br>
Command at the end of the code. I've attached the code below. Am I doing<br>
something silly?<br>
<br>
Thanks again<br>
Robbie<br>
<br>
void SnapshotView::slotSymmetry(const bool & flip, const int & axis)<br>
{<br>
// Determine which axes are flipped<br>
if(axis==xAxis) xFlipped=flip;<br>
if(axis==yAxis) yFlipped=flip;<br>
if(axis==zAxis) zFlipped=flip;<br>
<br>
// Add a vtkTranform to apply symmetry to the dataset<br>
vtkTransform * pTranslationX = vtkTransform::New();<br>
vtkTransform * pTranslationY = vtkTransform::New();<br>
vtkTransform * pTranslationZ = vtkTransform::New();<br>
<br>
// Add a new vtkPolyDataMapper to deal with the new symmetrical data<br>
vtkPolyDataMapper * pMapperSymm = vtkPolyDataMapper::New();<br>
// Add a new vtkPolyData to deal with the new symmetrical data<br>
vtkPolyData * pNewData = vtkPolyData::New();<br>
// Add a new vtkAppendData to deal with the new symmetrical data<br>
vtkAppendPolyData * pAppendData = vtkAppendPolyData::New();<br>
<br>
// Create translation to data for given symmetry<br>
pTranslationX->Translate(1.0, 0.0, 0.0);<br>
pTranslationY->Translate(0.0, 1.0, 0.0);<br>
pTranslationZ->Translate(0.0, 0.0, 1.0);<br>
<br>
// Add the source data pAppendData->AddInput(source->GetOutput()); to our<br>
new vtkAppendData<br>
pAppendData->AddInput(source->GetOutput());<br>
vtkPolyData * pNewSourceData = source->GetOutput();<br>
<br>
if(xFlipped){<br>
// Apply translation filter to data for given symmetry<br>
vtkTransformPolyDataFilter * pTransformFilter1 =<br>
vtkTransformPolyDataFilter::New();<br>
pTransformFilter1->SetInput(pNewSourceData);<br>
pTransformFilter1->SetTransform(pTranslationX);<br>
pTransformFilter1->Update();<br>
<br>
// Create a vtkPolyData set and add it to the vtkAppendPolyData for the<br>
symmetrical data<br>
vtkPolyData * pData1 = pTransformFilter1->GetOutput();<br>
pAppendData->AddInput(pData1);<br>
}<br>
<br>
if(yFlipped){<br>
// Apply translation filter to data for given symmetry<br>
vtkPolyData * pTempData = pAppendData->GetOutput();<br>
vtkTransformPolyDataFilter * pTransformFilter2 =<br>
vtkTransformPolyDataFilter::New();<br>
pTransformFilter2->SetInput(pTempData);<br>
pTransformFilter2->SetTransform(pTranslationY);<br>
pTransformFilter2->Update();<br>
<br>
// Create a vtkPolyData set and add it to the vtkAppendPolyData for the<br>
symmetrical data<br>
vtkPolyData * pData1 = pTransformFilter2->GetOutput();<br>
pAppendData->AddInput(pData1);<br>
}<br>
<br>
<br>
if(zFlipped){<br>
// Apply translation filter to data for given symmetry<br>
vtkPolyData * pTempData2 = pAppendData->GetOutput();<br>
vtkTransformPolyDataFilter * pTransformFilter3 =<br>
vtkTransformPolyDataFilter::New();<br>
pTransformFilter3->SetInput(pTempData2);<br>
pTransformFilter3->SetTransform(pTranslationZ);<br>
pTransformFilter3->Update();<br>
<br>
// Create a vtkPolyData set and add it to the vtkAppendPolyData for the<br>
symmetrical data<br>
vtkPolyData * pData1 = pTransformFilter3->GetOutput();<br>
pAppendData->AddInput(pData1);<br>
}<br>
<br>
// // Finally copy all the appended data to a new vtkPolyData set<br>
pNewSourceData = pAppendData->GetOutput();<br>
<br>
// Remap the data for display<br>
pMapperSymm->SetInput(pNewSourceData);<br>
<br>
// Add Mapper to Actor<br>
pActor->SetMapper(pMapperSymm);<br>
<br>
// Add Actor to renderer<br>
pRenderer->AddActor(pActor);<br>
<br>
// Reset camera<br>
pRenderer->ResetCamera();<br>
pRenderer->GetRenderWindow()->Render();<br>
<br>
pTranslationX->Delete();<br>
pTranslationY->Delete();<br>
pTranslationZ->Delete();<br>
pAppendData->Delete();<br>
pNewData->Delete();<br>
pNewSourceData->Delete();<br>
<div class="im">}<br>
</div><div class="im"><br></div></blockquote><div class="gmail_quote"><br></div>A quick thing, you should use </div><div class="gmail_quote">vtkSmartPointer<className> variableName = vtkSmartPointer<className>::New();</div>
<div class="gmail_quote">instead of</div><div class="gmail_quote">className* variableName = className::New();</div><div class="gmail_quote"><br></div><div class="gmail_quote">Then you do not have to have the big block of Deletes()'s at the end of the code :)</div>
<div class="gmail_quote"><br></div><div class="gmail_quote">Can you make an post the simplest compilable example that demonstrates the problem? It's much easier to debug if I can step through myself.</div><div class="gmail_quote">
<br clear="all">Thanks,<br><br>David </div>