[Insight-developers] Writing a SimplexMesh
with SpatialObjectWriter
Julien Jomier
jjomier at cs.unc.edu
Thu Jul 14 14:39:43 EDT 2005
Jim,
I don't see any easy way to fix this problem. The main issue is that a
->GetMesh() will fail on the MeshSpatialObject if the cast is not correct.
One other option is to template the SpatialObjectReader/Writer on the
type of Mesh to write instead of the current MeshTrait...
I think it's a good idea to keep the MeshSpatialObject has a wrapper to
the SimplexMesh.
Julien
Miller, James V (Research) wrote:
> I dont't think a static cast is a safe thing to do in this context.
>
> Jim
>
> -----Original Message-----
> From: Julien Jomier [mailto:jjomier at cs.unc.edu]
> Sent: Thursday, July 14, 2005 12:01 PM
> To: Miller, James V (Research)
> Cc: Insight-developers (E-mail)
> Subject: Re: [Insight-developers] Writing a SimplexMesh with
> SpatialObjectWriter
>
>
> Hi Jim,
>
> Thanks for the report.
> How about replacing the dynamic_cast by a static_cast in MetaSceneConverter?
>
> This option seems to work for me,
> Let me know,
>
> Julien
>
> Miller, James V (Research) wrote:
>
>>The following code:
>>
>>SpatialObjectWriter<N, T, Traits>::Pointer writer = SpatialObjectWriter<N, T, Traits>::New();
>>MeshSpatialObject<SimplexMeshType>::Pointer so = MeshSpatialObject<SimplexMeshType>::New();
>>so->SetMesh( simplexMesh );
>>writer->SetFileName( "foo");
>>writer->SetInput( so );
>>writer->Update();
>>
>>will crash because the MetaSceneConverter assumes that a MeshSpatialObject is always templated
>>over a Mesh and not a subclass of Mesh. At line 508, there is code that essentially does
>>
>> dynamic_cast<MeshSpatialObject<Mesh<T, N, Traits> >( so );
>>
>>When the SpatialObject, so, is a MeshSpatialObject<SimplexMesh<T, N, Traits> >, then the dynamic_cast
>>will fail because C++ cannot convert between MeshSpatialObjects templated over different types (even though
>>the two type are related by inheritance).
>>
>>This can be fixed on the user end by passing in MeshSpatialObjects templated over a Mesh instead of a
>>SimplexMesh. Then the user calls SetMesh() on the MeshSpatialObject, the pointer to the SimplexMesh
>>will be cast back to a pointer to a Mesh and the writer will work. But this is a little clunky.
>>
>>Another solution would be to create a SimplexMeshSpatialObject class that is used for wrapping
>>a SimplexMesh. But this is also clunky. I don't see why one shouldn't be able to use a MeshSpatialObject
>>to wrap a SimplexMesh.
>>
>>
>>It would be best if this is fixed at the MetaSceneConverter level. I think the following code
>>
>> if(!strncmp((*it)->GetTypeName(),"MeshSpatialObject",17))
>> {
>> typedef itk::Mesh<PixelType,NDimensions,TMeshTraits> MeshType;
>> MetaMeshConverter<NDimensions,PixelType,TMeshTraits> converter;
>> MetaMesh* mesh = converter.MeshSpatialObjectToMetaMesh(
>> dynamic_cast<itk::MeshSpatialObject<MeshType>*>((*it).GetPointer()));
>> if((*it)->GetParent())
>> {
>> mesh->ParentID((*it)->GetParent()->GetId());
>> }
>> mesh->Name((*it)->GetProperty()->GetName().c_str());
>> this->SetTransform(mesh, (*it)->GetObjectToParentTransform()) ;
>> metaScene->AddObject(mesh);
>> }
>>
>>needs to somehow cast the mesh that is internal to the SpatialObject back to a Mesh. So even if a
>>MeshSpatialObject is wrapping a subclass of Mesh, it could still be written to disk.
>>
>>
>>
>>Jim Miller
>>_____________________________________
>>Visualization & Computer Vision
>>GE Research
>>Bldg. KW, Room C218B
>>1 Research Circle, Schenectady NY 12309-1027
>>
>>millerjv at reserch.ge.com <mailto:millerjv at reserch.ge.com>
>>(518) 387-4005, Dial Comm: 8*833-4005
>>Cell: (518) 505-7065, Fax: (518) 387-6981
>>
>>
>>_______________________________________________
>>Insight-developers mailing list
>>Insight-developers at itk.org
>>http://www.itk.org/mailman/listinfo/insight-developers
>>
>>
>>
>
>
> _______________________________________________
> Insight-developers mailing list
> Insight-developers at itk.org
> http://www.itk.org/mailman/listinfo/insight-developers
>
>
>
More information about the Insight-developers
mailing list