<div dir="ltr">Ah interesting. Note that I plan to remove <span style="font-family:arial,sans-serif;font-size:13px">DataChanged() in the future. It is a serious performance bottleneck when multiple threads are setting different parts of an array because it causes all threads to write to the same memory location where that flag is stored. The right way of doing this is to call Modified() after doing a set of changes to notify whatever may depend on an array.</span><div>

<span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Best,</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">-berk</span></div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Aug 27, 2014 at 5:30 PM, Jeff Baumes <span dir="ltr"><<a href="mailto:jeff.baumes@kitware.com" target="_blank">jeff.baumes@kitware.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">It is unclear what changed exactly, but the current behavior is that for numeric arrays, setting data with SetValue() (which is what AddVertex ultimately does to the pedigree ID array), does not in fact invoke DataChanged() on the array which would signal the lookup to rebuild on the next LookupValue() call (which is what FindVertex() performs). This was done for performance reasons, and perhaps this change was made between 5.8 and 5.10.<div>


<br></div><div>If you call pedigreeIds->DataChanged() just before the call to FindVertex(), the issue should be resolved.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">

On Wed, Aug 27, 2014 at 9:28 AM, Adrian Friebel <span dir="ltr"><<a href="mailto:friebel@izbi.uni-leipzig.de" target="_blank">friebel@izbi.uni-leipzig.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hey,<br>
so far I compiled my software against vtk 5.8. Recently I tried to compile it against 5.10.1 and noticed unexpected behaviour while adding vertices to a graph while passing pedigree ids.<br>
Below a minimal example and its output:<br>
<br>
#include <stdio.h><br>
#include <iostream><br>
<br>
#include <vtkDataSetAttributes.h><br>
#include <vtkMutableUndirectedGraph.h><br>
#include <vtkSmartPointer.h><br>
#include <vtkUnsignedLongArray.h><br>
<br>
int  main(int argc, char **argv)<br>
{<br>
    vtkSmartPointer<<u></u>vtkMutableUndirectedGraph> graph = vtkSmartPointer<<u></u>vtkMutableUndirectedGraph>::<u></u>New();<br>
<br>
    vtkSmartPointer<<u></u>vtkUnsignedLongArray> pedigreeIds = vtkSmartPointer<<u></u>vtkUnsignedLongArray>::New();<br>
    pedigreeIds->Initialize();<br>
    pedigreeIds->SetName("Pedigree IDs");<br>
<br>
    graph->GetVertexData()-><u></u>SetPedigreeIds(pedigreeIds);<br>
<br>
    for(unsigned int i=0; i<10; ++i) {<br>
        vtkIdType v = graph->AddVertex(i*100);<br>
        std::cout << "i = " << i << ": v = " << v <<<br>
                ", graph->GetVertex[..]-><u></u>GetVariantValue( " << v << ") = " << graph->GetVertexData()-><u></u>GetPedigreeIds()-><u></u>GetVariantValue(v) <<<br>



                ", graph->FindVertex(" << i << "*100) = " << graph->FindVertex(i*100) << std::endl;<br>
    }<br>
    return 0;<br>
}<br>
<br>
VTK-5.8:<br>
i = 0: v = 0, graph->GetVertex[..]-><u></u>GetVariantValue( 0) = 0, graph->FindVertex(0*100) = 0<br>
i = 1: v = 1, graph->GetVertex[..]-><u></u>GetVariantValue( 1) = 100, graph->FindVertex(1*100) = 1<br>
i = 2: v = 2, graph->GetVertex[..]-><u></u>GetVariantValue( 2) = 200, graph->FindVertex(2*100) = 2<br>
i = 3: v = 3, graph->GetVertex[..]-><u></u>GetVariantValue( 3) = 300, graph->FindVertex(3*100) = 3<br>
i = 4: v = 4, graph->GetVertex[..]-><u></u>GetVariantValue( 4) = 400, graph->FindVertex(4*100) = 4<br>
i = 5: v = 5, graph->GetVertex[..]-><u></u>GetVariantValue( 5) = 500, graph->FindVertex(5*100) = 5<br>
i = 6: v = 6, graph->GetVertex[..]-><u></u>GetVariantValue( 6) = 600, graph->FindVertex(6*100) = 6<br>
i = 7: v = 7, graph->GetVertex[..]-><u></u>GetVariantValue( 7) = 700, graph->FindVertex(7*100) = 7<br>
i = 8: v = 8, graph->GetVertex[..]-><u></u>GetVariantValue( 8) = 800, graph->FindVertex(8*100) = 8<br>
i = 9: v = 9, graph->GetVertex[..]-><u></u>GetVariantValue( 9) = 900, graph->FindVertex(9*100) = 9<br>
<br>
VTK-5.10.1:<br>
i = 0: v = 0, graph->GetVertex[..]-><u></u>GetVariantValue( 0) = 0, graph->FindVertex(0*100) = 0<br>
i = 1: v = 1, graph->GetVertex[..]-><u></u>GetVariantValue( 1) = 100, graph->FindVertex(1*100) = 1<br>
i = 2: v = 2, graph->GetVertex[..]-><u></u>GetVariantValue( 2) = 200, graph->FindVertex(2*100) = -1<br>
i = 3: v = 3, graph->GetVertex[..]-><u></u>GetVariantValue( 3) = 300, graph->FindVertex(3*100) = 3<br>
i = 4: v = 4, graph->GetVertex[..]-><u></u>GetVariantValue( 4) = 400, graph->FindVertex(4*100) = -1<br>
i = 5: v = 5, graph->GetVertex[..]-><u></u>GetVariantValue( 5) = 500, graph->FindVertex(5*100) = -1<br>
i = 6: v = 6, graph->GetVertex[..]-><u></u>GetVariantValue( 6) = 600, graph->FindVertex(6*100) = -1<br>
i = 7: v = 7, graph->GetVertex[..]-><u></u>GetVariantValue( 7) = 700, graph->FindVertex(7*100) = 7<br>
i = 8: v = 8, graph->GetVertex[..]-><u></u>GetVariantValue( 8) = 800, graph->FindVertex(8*100) = -1<br>
i = 9: v = 9, graph->GetVertex[..]-><u></u>GetVariantValue( 9) = 900, graph->FindVertex(9*100) = -1<br>
<br>
<br>
It seems that there is something wrong with the AbstractArray::LookupValue in 5.10.1, since the array entries value->pedId are made.<br>
I am aware that 6.1 was released some time ago. Maybe the issue was solved already, but since I couldn't find any reports on this I thought I might inform you guys.<br>
Or am I just missing some newly introduced update call?<br>
<br>
Best,<br>
Adrian.<br>
<br>
-- <br>
Dipl.-Inform. Adrian Friebel<br>
Research Group for Multicellular Systems Biology<br>
Interdisciplinary Centre for BioInformatics<br>
University of Leipzig<br>
Haertelstrasse 16-18<br>
04107 Leipzig<br>
Germany<br>
Tel.: <a href="tel:%2B49%20341%2097-16627" value="+493419716627" target="_blank">+49 341 97-16627</a><br>
email:  <a href="mailto:adrian.friebel@uni-leipzig.de" target="_blank">adrian.friebel@uni-leipzig.de</a><br>
<br>
______________________________<u></u>_________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/<u></u>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_<u></u>FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" target="_blank">http://public.kitware.com/<u></u>mailman/listinfo/vtkusers</a><br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" target="_blank">http://public.kitware.com/mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br></div>