<div class="gmail_quote">On Mon, Feb 8, 2010 at 5:17 PM, Banksie <span dir="ltr">&lt;<a href="mailto:banks@wai.com">banks@wai.com</a>&gt;</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&#39;m a lot closer than I was, but I&#39;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-&gt;GetRenderWindow-&gt;Render();<br>
<br>
Command at the end of the code. I&#39;ve attached the code below. Am I doing<br>
something silly?<br>
<br>
Thanks again<br>
Robbie<br>
<br>
void SnapshotView::slotSymmetry(const bool &amp; flip, const int &amp; 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-&gt;Translate(1.0, 0.0, 0.0);<br>
        pTranslationY-&gt;Translate(0.0, 1.0, 0.0);<br>
        pTranslationZ-&gt;Translate(0.0, 0.0, 1.0);<br>
<br>
        // Add the source data  pAppendData-&gt;AddInput(source-&gt;GetOutput()); to our<br>
new vtkAppendData<br>
        pAppendData-&gt;AddInput(source-&gt;GetOutput());<br>
        vtkPolyData * pNewSourceData = source-&gt;GetOutput();<br>
<br>
        if(xFlipped){<br>
                // Apply translation filter to data for given symmetry<br>
                vtkTransformPolyDataFilter * pTransformFilter1 =<br>
vtkTransformPolyDataFilter::New();<br>
                pTransformFilter1-&gt;SetInput(pNewSourceData);<br>
                pTransformFilter1-&gt;SetTransform(pTranslationX);<br>
                pTransformFilter1-&gt;Update();<br>
<br>
                // Create a vtkPolyData set and add it to the vtkAppendPolyData for the<br>
symmetrical data<br>
                vtkPolyData * pData1 = pTransformFilter1-&gt;GetOutput();<br>
                pAppendData-&gt;AddInput(pData1);<br>
        }<br>
<br>
        if(yFlipped){<br>
                // Apply translation filter to data for given symmetry<br>
                vtkPolyData * pTempData = pAppendData-&gt;GetOutput();<br>
                vtkTransformPolyDataFilter * pTransformFilter2 =<br>
vtkTransformPolyDataFilter::New();<br>
                pTransformFilter2-&gt;SetInput(pTempData);<br>
                pTransformFilter2-&gt;SetTransform(pTranslationY);<br>
                pTransformFilter2-&gt;Update();<br>
<br>
                // Create a vtkPolyData set and add it to the vtkAppendPolyData for the<br>
symmetrical data<br>
                vtkPolyData * pData1 = pTransformFilter2-&gt;GetOutput();<br>
                pAppendData-&gt;AddInput(pData1);<br>
        }<br>
<br>
<br>
        if(zFlipped){<br>
                // Apply translation filter to data for given symmetry<br>
                vtkPolyData * pTempData2 = pAppendData-&gt;GetOutput();<br>
                vtkTransformPolyDataFilter * pTransformFilter3 =<br>
vtkTransformPolyDataFilter::New();<br>
                pTransformFilter3-&gt;SetInput(pTempData2);<br>
                pTransformFilter3-&gt;SetTransform(pTranslationZ);<br>
                pTransformFilter3-&gt;Update();<br>
<br>
                // Create a vtkPolyData set and add it to the vtkAppendPolyData for the<br>
symmetrical data<br>
                vtkPolyData * pData1 = pTransformFilter3-&gt;GetOutput();<br>
                pAppendData-&gt;AddInput(pData1);<br>
        }<br>
<br>
//      // Finally copy all the appended data to a new vtkPolyData set<br>
        pNewSourceData = pAppendData-&gt;GetOutput();<br>
<br>
        // Remap the data for display<br>
        pMapperSymm-&gt;SetInput(pNewSourceData);<br>
<br>
        // Add Mapper to Actor<br>
        pActor-&gt;SetMapper(pMapperSymm);<br>
<br>
        // Add Actor to renderer<br>
        pRenderer-&gt;AddActor(pActor);<br>
<br>
        // Reset camera<br>
        pRenderer-&gt;ResetCamera();<br>
        pRenderer-&gt;GetRenderWindow()-&gt;Render();<br>
<br>
        pTranslationX-&gt;Delete();<br>
        pTranslationY-&gt;Delete();<br>
        pTranslationZ-&gt;Delete();<br>
        pAppendData-&gt;Delete();<br>
        pNewData-&gt;Delete();<br>
        pNewSourceData-&gt;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&lt;className&gt; variableName = vtkSmartPointer&lt;className&gt;::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()&#39;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&#39;s much easier to debug if I can step through myself.</div><div class="gmail_quote">
<br clear="all">Thanks,<br><br>David </div>