<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Texte brut Car";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.5pt;
        font-family:Consolas;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Texte de bulles Car";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.TextebrutCar
        {mso-style-name:"Texte brut Car";
        mso-style-priority:99;
        mso-style-link:"Texte brut";
        font-family:Consolas;}
span.TextedebullesCar
        {mso-style-name:"Texte de bulles Car";
        mso-style-priority:99;
        mso-style-link:"Texte de bulles";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=FR link=blue vlink=purple>
<div class=Section1>
<p class=MsoPlainText><span lang=EN-US>Hi David,<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>I used Paraview to produce this first
image but it was a trick: I applied something I use as a basis for CAD/CAE
conversion and automatic meshing.<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>Here is the procedure you should follow:<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>- open your VTU<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>- extract the surface<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>- ‘clean’ the surface (I
used a 0.005 tolerance)<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>- extract the feature edges (only boundary
edges)<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>You should get something like this:<o:p></o:p></span></p>
<p class=MsoPlainText><img width=373 height=222 id="Image_x0020_2"
src="cid:image002.png@01C98AA7.283DF390"><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>Now, with Paraview, you can select some
contours and use vtkDelaunay to fill them … It will gave you a first
result.<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>What I was suggesting instead is the use
vtkStripper, to rebuild clean contours from this, and then to use vtkTriangleFilter<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>vtkStripper holeStrips
= new vtkStripper();<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>holeStrips.SetInput(featuresEdges.GetOutput());<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>holeStrips.Update();
<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>vtkPolyData holePoly
= new vtkPolyData();<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>holePoly.SetPoints(holeStrips.GetOutput().GetPoints());<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>holePoly.SetPolys(holeStrips.GetOutput().GetLines());
<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>vtkTriangleFilter
missingTriangles = new vtkTriangleFilter();<o:p></o:p></span></p>
<p class=MsoPlainText style='margin-left:35.4pt'><span lang=EN-US>missingTriangles.SetInput(holePoly);<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>My guess is that you’ll have to do
that more than one to fill every hole.<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>If it fills too much holes, maybe you
should subset featuresEdges by region with a connectivity filter before ‘stripping’
the whole set.<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>BTW, you could use that to remove the inner
point instead of a convex hull / threshold …<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>Try it with the ‘connectivity’
tool in paraview … <o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText><span lang=EN-US>FYI : We used to drop a bag of flour or
talcum powder on the object before laser scanning. It helps the laser to detect
the actual surface and to not mess anymore with shiny or translucent surface
... <o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText>Cordialement,<o:p></o:p></p>
<p class=MsoPlainText>F.Danesi<o:p></o:p></p>
<p class=MsoPlainText>-- <o:p></o:p></p>
<p class=MsoPlainText>Responsable Développement Informatique et Travail
Collaboratif<o:p></o:p></p>
<p class=MsoPlainText>Département DINCCS (Département Ingénierie Numérique,
Conception Collaborative et Simulation)<o:p></o:p></p>
<p class=MsoPlainText>MICADO / DINCCS<o:p></o:p></p>
<p class=MsoPlainText>Pôle de Haute Technologie, BP 90005<o:p></o:p></p>
<p class=MsoPlainText>08005 Charleville-Mézières Cedex<o:p></o:p></p>
<p class=MsoPlainText>Tel. : +33 (0) 3.24.41.69.55 / +33 (0) 6.62.76.13.32<o:p></o:p></p>
<p class=MsoPlainText>Email : frederic.danesi@dinccs.com<o:p></o:p></p>
<p class=MsoPlainText><span lang=EN-US>Web : www.afmicado.com / www.dinccs.com<o:p></o:p></span></p>
<p class=MsoPlainText><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoPlainText>-----Message d'origine-----<br>
De : David Doria [mailto:daviddoria@gmail.com] <br>
Envoyé : samedi 7 février 2009 15:21<br>
À : Frederic Danesi<br>
Objet : Re: Car Model<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Fred -<o:p></o:p></p>
<p class=MsoPlainText>I have several LiDAR scans from different angles of the
same car that<o:p></o:p></p>
<p class=MsoPlainText>have been registered to give the full surface rather than
just 2.5D (a<o:p></o:p></p>
<p class=MsoPlainText>scan from one position). The problem is that the laser
goes through<o:p></o:p></p>
<p class=MsoPlainText>the windows, so it's been tough to make a water tight
model from the<o:p></o:p></p>
<p class=MsoPlainText>resulting point cloud. I would like to know the
idea/procedure so I<o:p></o:p></p>
<p class=MsoPlainText>can create this type of mesh from other scans in the
future as well. I<o:p></o:p></p>
<p class=MsoPlainText>can use any combination of c++, paraview, and VTK. It may
be easiest<o:p></o:p></p>
<p class=MsoPlainText>to learn the steps if they can all be done in Paraview,
because as far<o:p></o:p></p>
<p class=MsoPlainText>as I know paraview completely uses VTK, so I can always
go back and<o:p></o:p></p>
<p class=MsoPlainText>figure out how to do whatever we do in Paraview in VTK.<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Here are the raw points:<o:p></o:p></p>
<p class=MsoPlainText>http://www.rpi.edu/~doriad/CarPoints.vtp<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Another problem is that there are points inside the
volume (the<o:p></o:p></p>
<p class=MsoPlainText>headrests etc). I used a convex hull to threshold points
that fell<o:p></o:p></p>
<p class=MsoPlainText>only within some distance of the hull before I started
trying to<o:p></o:p></p>
<p class=MsoPlainText>create the mesh. Sound reasonable?<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>What was that "automatic filling procedure"
that you used to produce<o:p></o:p></p>
<p class=MsoPlainText>the image you sent me? It is very close to what I'm
looking for -<o:p></o:p></p>
<p class=MsoPlainText>there seem to still be some holes between the tires and
the body of<o:p></o:p></p>
<p class=MsoPlainText>the car - maybe they can be filled in the same way you
filled in the<o:p></o:p></p>
<p class=MsoPlainText>windows? How did you do that?<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>Thanks for all the help Fred!<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>David<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>On Fri, Feb 6, 2009 at 10:05 AM, Frederic Danesi<o:p></o:p></p>
<p class=MsoPlainText><frederic.danesi@dinccs.com> wrote:<o:p></o:p></p>
<p class=MsoPlainText>> Hi Dave,<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Using automatic filling method produce the following
result. It does not<o:p></o:p></p>
<p class=MsoPlainText>> sound really good to me … but it is a first
step.<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> What exactly are you looking for ?<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Is this a model you got by scanning a vehicle ? if
so, maybe I can do better<o:p></o:p></p>
<p class=MsoPlainText>> with the points cloud or the STL directly.<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> You are working with paraview or VTK ? Do you just
want to correct this<o:p></o:p></p>
<p class=MsoPlainText>> model, or you're tried to write an application to do
so ?<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Fred.<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Cordialement,<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> F.Danesi<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> --<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Responsable Développement Informatique et Travail
Collaboratif<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Département DINCCS (Département Ingénierie
Numérique, Conception<o:p></o:p></p>
<p class=MsoPlainText>> Collaborative et Simulation)<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> MICADO / DINCCS<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Pôle de Haute Technologie, BP 90005<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> 08005 Charleville-Mézières Cedex<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Tel. : +33 (0) 3.24.41.69.55 / +33 (0) 6.62.76.13.32<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Email : frederic.danesi@dinccs.com<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Web : www.afmicado.com / www.dinccs.com<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> -----Message d'origine-----<o:p></o:p></p>
<p class=MsoPlainText>> De : daviddoria@gmail.com
[mailto:daviddoria@gmail.com]<o:p></o:p></p>
<p class=MsoPlainText>> Envoyé : vendredi 6 février 2009 15:20<o:p></o:p></p>
<p class=MsoPlainText>> À : frederic.danesi@dinccs.com<o:p></o:p></p>
<p class=MsoPlainText>> Objet : Car Model<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Hi Fred- thanks for the offer! I'll take you up on
it only because I've been<o:p></o:p></p>
<p class=MsoPlainText>> trying to do this off and on for a couple of months
now haha.<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Here is a link to the model<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> http://rpi.edu/~doriad/Car.vtp<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> I would like to get a watertight, non-convex (ie
still looks very much like<o:p></o:p></p>
<p class=MsoPlainText>> the car) mesh from this. I tried to follow your
instructions: I used the<o:p></o:p></p>
<p class=MsoPlainText>> "extract edges filter" and it seemed to
work. Then I tried to do "Extract<o:p></o:p></p>
<p class=MsoPlainText>> cells by region" but I didn't know what I was
doing so I just left it<o:p></o:p></p>
<p class=MsoPlainText>> default. Then I did "Extract surface" but
nothing happened.<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Any tips would be great!<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Thanks,<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Dave<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Ce message entrant est certifié sans virus connu.<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Analyse effectuée par AVG - www.avg.fr<o:p></o:p></p>
<p class=MsoPlainText>><o:p> </o:p></p>
<p class=MsoPlainText>> Version: 8.0.233 / Base de données virale:
270.10.18/1936 - Date: 02/05/09<o:p></o:p></p>
<p class=MsoPlainText>> 11:34:00<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>-- <o:p></o:p></p>
<p class=MsoPlainText>Thanks,<o:p></o:p></p>
<p class=MsoPlainText><o:p> </o:p></p>
<p class=MsoPlainText>David<o:p></o:p></p>
<p class=MsoPlainText>Ce message entrant est certifié sans virus connu.<o:p></o:p></p>
<p class=MsoPlainText>Analyse effectuée par AVG - www.avg.fr <o:p></o:p></p>
<p class=MsoPlainText>Version: 8.0.233 / Base de données virale: 270.10.19/1939
- Date: 02/06/09 11:31:00<o:p></o:p></p>
</div>
</body>
</html>