[Insight-developers] Join vertex on QEMeshes
Alexandre GOUAILLARD
Alexandre_Gouaillard at hms.harvard.edu
Thu Jun 26 08:35:26 EDT 2008
Hi thomas,
M_NoPoint is defined as vcl_numeric_limits< OriginRefType >::max()
In itkGeometricalQuadEdge.txx
It should not be 0.
I never met this case, I will to make a code that deletes the cell #0
(should always be an edge BTW) and see what happen.
Thanks,
Alex.
On 6/26/08 8:08 AM, "Thomas Boettger" <tboettger at googlemail.com> wrote:
> Alex,
>
> one more thing:
>
> I found the following lines of code which do worry me a little bit:
>
> itkQuadEdgeMesh::LightWeightDeleteEdge(...) (around Line 900)
>
> CellIdentifier LineIdent = e->GetIdent( );
> if( LineIdent != m_NoPoint )
> {
> EdgeCellType* edgeCell = dynamic_cast< EdgeCellType* >(
> this->GetCells( )->GetElement( LineIdent ) );
> this->LightWeightDeleteEdge( edgeCell );
> }
> else
> {
> itkDebugMacro( "Edge Not found. LineIdent not set?" );
> return;
> }
>
> Here you compare the LineIdentifier to m_NoPoint. In my version
> m_NoPoint is defined as 0. For the very first edge
> FindFirstUnusedCellIndex() will return 0 as well.
>
> Then I cannot delete the edge added first. This will of course stop
> the JoinVertex function from working for this first edge. The edge is
> not deleted and then the point is not isolated and cannot be deleted.
>
> Is this problem know already? May be you can use
>
> NumericTraits<unsigned long>::max()
>
> instead ?
>
> In my own decimation I unfortunately always tried to join the vertices
> of this first edge and was wondering why the point count was not
> decreasing.
>
>
> Best regards,
>
> Thomas
>
>
>
> On Thu, Jun 26, 2008 at 11:07 AM, Thomas Boettger
> <tboettger at googlemail.com> wrote:
>> Hi Alex,
>>
>> thanks for the quick response. I will test this. The decimation
>> framework sounds interesting. I would be great if I would be able to
>> implement my own decimation criteria based on you new code.
>>
>> Did you also discuss changes for the SimplexMesh classes. I think the
>> mesh class could could almost be discarded, but I guess ITK wants to
>> keep it for backwards compatibility. The deformation filter itself is
>> rather simple as long as you can access each points three neighbors
>> (which is quite simple with the QEmeshes we should be fine. One open
>> issue is where we should store all the computed values like the
>> barycentric coordinates, normals and so on. This currently is quite
>> messy in the old code.
>>
>> I also never really used the contributed classes as I continued
>> developing and changing loads of small things in the deformable model
>> itself, e.g. multi threading, global contraints based on ICP (by
>> incorporating vtk classes), different external force computations and
>> more...
>>
>> So I cannot really tell what the best way would be for future
>> directions. But I am willing to discuss, help and maybe contribute if
>> I can be of any help.
>>
>>
>> Best,
>>
>> Thomas
>>
>>
>> On Wed, Jun 25, 2008 at 10:55 PM, Alexandre GOUAILLARD
>> <Alexandre_Gouaillard at hms.harvard.edu> wrote:
>>> Hi thomas.
>>>
>>> Problem solved.
>>> It was indeed because of the points IDs.
>>> I added a method to QEMesh that you should call before you write the mesh"
>>> SqueezePointsIds()
>>>
>>> I added this one line in your code and it works fine (it was thus a
>>> vizualization problem.
>>>
>>> BTW we have a decimation code ready, and we are going to put it in ITK
>>> beofre the end of the week. It's a complete framework, where you can plug
>>> the stop criterion and so on.
>>> We have a dedicated priorty queue for mesh decimation, a decimation engine
>>> (based on JoinVErtex, indeed), an edgelength criterion, and we are polishing
>>> a Quadratic criterion right now.
>>>
>>> Alex.
>>>
>>>
>>> On 6/25/08 12:01 PM, "Thomas Boettger" <tboettger at googlemail.com> wrote:
>>>
>>>> ---------- Forwarded message ----------
>>>> From: Thomas Boettger <tboettger at googlemail.com>
>>>> Date: Wed, Jun 25, 2008 at 5:59 PM
>>>> Subject: Join vertex on QEMeshes
>>>> To: alex Gouaillard <AGouaillard at slb.com>, baghdadi at sickkids.ca
>>>>
>>>>
>>>> Hi Alex and Leila,
>>>>
>>>> I started experimenting with the QEMesh classes (ITK 3.6.0).
>>>>
>>>> And ran into the following problem:
>>>>
>>>> 1. I load a vtk mesh
>>>> 2. Call JoinVertexFunction for an arbitrary edge (look through the
>>>> input vtk file in a text editor and choose one line.
>>>> 3. Store the mesh
>>>>
>>>> I expected to see a correct output mesh (with one point less and all
>>>> edges and faces correct), but when I load both, input and result to
>>>> paraview the result looks corrupted.
>>>>
>>>> You can use the source code in the attached zip file to reproduce it.
>>>> Just ignore all lines of code besides the main function...
>>>>
>>>> I also attach you the mesh I used for the testing (smallMesh.vtk) and
>>>> the result (result.vtk).
>>>>
>>>> cmd line inputs were:
>>>> $ /cygdrive/d/devel/QEMeshTests/bin/release/JoinVertexTest.exe
>>>> smallMesh.vtk result.vtk 0 3
>>>>
>>>> I am not sure what is going wrong. Maybe I did not understand the
>>>> JoinVertex operator and need to take care of face corrections myself
>>>> after deleting the point?
>>>>
>>>> Help is welcome...
>>>>
>>>>
>>>> Best regards,
>>>>
>>>> Thomas
>>>
>>>
>>>
>>
More information about the Insight-developers
mailing list