<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
From: hawkingyy@hotmail.com<BR>To: daviddoria+vtk@gmail.com<BR>Subject: RE: [vtkusers] An ERROR during reconstruction by using vtkMarchingCubes<BR>Date: Mon, 17 May 2010 15:54:38 +0800<BR><BR>
<STYLE>
.ExternalClass .ecxhmmessage P
{padding:0px;}
.ExternalClass body.ecxhmmessage
{font-size:10pt;font-family:Verdana;}
</STYLE>
Well, thank you so much!<BR>&nbsp;<BR>As what you told me, I used Updata() and vtkSmartPointer, and rearrange the codes, but the problem still remain:<BR>&nbsp;<BR>ERROR: In f:\program files\vtk 5.4\vtk src\common\vtkDataArrayTemplate.txx, line 141<BR>vtkIdTypeArray (56C9E450): Unable to allocate 53329185 elements of size 4 bytes.<BR>&nbsp;<BR>I'm not familiar with coding, so I&nbsp;have no idear with debugging, but I set some break during running,&nbsp;and found the&nbsp;ERROR just happened when the vtkStripper is running.<BR>&nbsp;<BR>Could you give&nbsp;me some&nbsp;advice please?<BR>
&nbsp;<BR>
Here is the code:<BR>
/////////////////////////////////////////////////////////////<BR>
#include "vtkRenderer.h"<BR>#include "vtkRenderWindow.h"<BR>#include "vtkRenderWindowInteractor.h"<BR>#include "vtkImageData.h"<BR>#include "vtkMarchingCubes.h"<BR>#include "vtkActor.h"<BR>#include "vtkPolyDataMapper.h"<BR>#include "vtkDICOMImageReader.h"<BR>#include "vtkStripper.h"<BR>#include "vtkDirectory.h"<BR>#include "vtkStripper.h"<BR>#include "vtkImageThreshold.h"<BR>#include "vtkSmartPointer.h"<BR>
int main()<BR>{&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;vtkSmartPointer&lt;vtkDICOMImageReader&gt;&nbsp; DicomReader = vtkSmartPointer&lt;vtkDICOMImageReader&gt; :: New(); <BR>&nbsp;&nbsp;DicomReader -&gt; SetDirectoryName("D://Data//CT");<BR>&nbsp;&nbsp;DicomReader -&gt; Update();<BR>&nbsp;<BR>
&nbsp;&nbsp;vtkSmartPointer&lt;vtkMarchingCubes&gt;&nbsp; MC = vtkSmartPointer&lt;vtkMarchingCubes&gt; :: New();<BR>&nbsp;&nbsp;MC -&gt; SetInput(DicomReader -&gt; GetOutput());<BR>&nbsp;&nbsp;MC -&gt; SetValue(0, 80);<BR>&nbsp;&nbsp;MC -&gt; ComputeGradientsOn();<BR>&nbsp;&nbsp;MC -&gt; ComputeScalarsOff();<BR>&nbsp;&nbsp;MC -&gt; Update();<BR>
&nbsp;<BR>
&nbsp;vtkSmartPointer&lt;vtkStripper&gt;&nbsp; stripper = vtkSmartPointer&lt;vtkStripper&gt; :: New();<BR>&nbsp;&nbsp;stripper -&gt; SetInput (MC -&gt; GetOutput());<BR>&nbsp;&nbsp;stripper -&gt; Update();<BR>
&nbsp;<BR>
&nbsp;vtkSmartPointer&lt;vtkPolyDataMapper&gt;&nbsp; mapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt; :: New();<BR>&nbsp;&nbsp;mapper -&gt; SetInput (stripper -&gt; GetOutput());<BR>&nbsp;&nbsp;mapper -&gt; Update();<BR>
&nbsp;<BR>
&nbsp;vtkSmartPointer&lt;vtkActor&gt; actor = vtkSmartPointer&lt;vtkActor&gt; :: New();<BR>&nbsp;&nbsp;actor -&gt; SetMapper(mapper);<BR>
&nbsp;<BR>
&nbsp;vtkSmartPointer&lt;vtkRenderer&gt; ren = vtkSmartPointer&lt;vtkRenderer&gt; :: New();<BR>&nbsp;&nbsp;ren -&gt; AddActor(actor);<BR>&nbsp;&nbsp;ren -&gt; SetBackground (1, 1, 1);<BR>
&nbsp;<BR>
&nbsp;vtkSmartPointer&lt;vtkRenderWindow&gt; renWin = vtkSmartPointer&lt;vtkRenderWindow&gt; :: New();<BR>&nbsp;&nbsp;renWin -&gt; AddRenderer(ren);<BR>&nbsp;&nbsp;<BR>&nbsp;vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; iren = vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; :: New();<BR>&nbsp;&nbsp;iren -&gt; SetRenderWindow (renWin);<BR>&nbsp;&nbsp;<BR>
&nbsp;iren-&gt;Initialize();<BR>&nbsp;iren-&gt;Start();<BR>
&nbsp;return 0;<BR>
}<BR>&nbsp;<BR>
/////////////////////////////////////////////////////////////&nbsp;<BR><BR>
Thanks!<BR>&nbsp;<BR>Daniel<BR>&nbsp;<BR>&gt; Date: Sun, 16 May 2010 09:04:38 -0400<BR>&gt; Subject: Re: [vtkusers] An ERROR during reconstruction by using vtkMarchingCubes<BR>&gt; From: daviddoria+vtk@gmail.com<BR>&gt; To: hawkingyy@hotmail.com<BR>&gt; CC: vtkusers@vtk.org<BR>&gt; <BR>&gt; 2010/5/16 noc &lt;hawkingyy@hotmail.com&gt;:<BR>&gt; &gt; Hi everybody,<BR>&gt; &gt; I'm just new here.<BR>&gt; &gt;<BR>&gt; &gt; Well, I met a problem in isosurface drawing.<BR>&gt; &gt;<BR>&gt; &gt; The ERROE message is: ERROR: In f:\program files\vtk 5.4\vtk<BR>&gt; &gt; src\common\vtkDataArrayTemplate.txx, line 141 vtkIdTypeArray (501E4CC8):<BR>&gt; &gt; Unable to allocate 44288846 elements of size 4 bytes.<BR>&gt; &gt;<BR>&gt; &gt; I wondered why this happen so frequently. I just used 100 DICOM files,&nbsp; the<BR>&gt; &gt; RAM of my computer is 1GB, and the virtual memory is 2GB, during<BR>&gt; &gt; reconstruction, it only cost 0.99GB memory in total.<BR>&gt; &gt;<BR>&gt; &gt; Could anyone help me please?<BR>&gt; &gt;<BR>&gt; &gt; Thanks a lot!!!<BR>&gt; &gt;<BR>&gt; &gt; In the end, here is my code:<BR>&gt; &gt;<BR>&gt; &gt; #include "vtkRenderer.h"<BR>&gt; &gt; #include "vtkRenderWindow.h"<BR>&gt; &gt; #include "vtkRenderWindowInteractor.h"<BR>&gt; &gt; #include "vtkImageData.h"<BR>&gt; &gt; #include "vtkMarchingCubes.h"<BR>&gt; &gt; #include "vtkActor.h"<BR>&gt; &gt; #include "vtkPolyDataMapper.h"<BR>&gt; &gt; #include "vtkDICOMImageReader.h"<BR>&gt; &gt; #include "vtkStripper.h"<BR>&gt; &gt; #include "vtkDirectory.h"<BR>&gt; &gt; #include "vtkStripper.h"<BR>&gt; &gt;<BR>&gt; &gt; int main()<BR>&gt; &gt; {<BR>&gt; &gt; &nbsp;&nbsp;vtkDICOMImageReader * Dicom Reader = vtkDICOMImageReader :: New();<BR>&gt; &gt; &nbsp;&nbsp;DicomReader -&gt; SetDirectoryName("D:/Data/CT");<BR>&gt; &gt;<BR>&gt; &gt; &nbsp; vtkRenderer * ren = vtkRenderer :: New();<BR>&gt; &gt; &nbsp;&nbsp;ren -&gt; SetBackground (1, 1, 1);<BR>&gt; &gt;<BR>&gt; &gt; &nbsp; vtkRenderWindow * renWin = vtkRenderWindow :: New();<BR>&gt; &gt; &nbsp;&nbsp;renWin -&gt; AddRenderer(ren);<BR>&gt; &gt;<BR>&gt; &gt; &nbsp; vtkRenderWindowInteractor * iren = vtkRenderWindowInteractor :: New();<BR>&gt; &gt; &nbsp;&nbsp;iren -&gt; SetRenderWindow (renWin);<BR>&gt; &gt;<BR>&gt; &gt; &nbsp;&nbsp;vtkMarchingCubes * MC = vtkMarchingCubes :: New();<BR>&gt; &gt; &nbsp;&nbsp;MC -&gt; SetInput(DicomReader -&gt; GetOutput());<BR>&gt; &gt; &nbsp;&nbsp;MC -&gt; SetValue(0, 30);<BR>&gt; &gt; &nbsp;&nbsp;MC -&gt; ComputeGradientsOn( );<BR>&gt; &gt; &nbsp;&nbsp;MC -&gt; ComputeScalarsOff();<BR>&gt; &gt;<BR>&gt; &gt; &nbsp; vtkStripper * stripper = vtkStripper :: New();<BR>&gt; &gt; &nbsp;&nbsp;stripper -&gt; SetInput (MC -&gt; GetOutput());<BR>&gt; &gt;<BR>&gt; &gt; &nbsp; vtkPolyDataMapper * mapper = vtkPolyDataMapper :: New();<BR>&gt; &gt; &nbsp;&nbsp;mapper -&gt; SetInput (stripper -&gt; GetOutput());<BR>&gt; &gt;<BR>&gt; &gt; &nbsp; vtkActor * actor = vtkActor :: New();<BR>&gt; &gt; &nbsp;&nbsp;actor -&gt; SetMapper(mapper);<BR>&gt; &gt;<BR>&gt; &gt; &nbsp;&nbsp;ren -&gt; AddActor(actor);<BR>&gt; &gt;<BR>&gt; &gt; &nbsp;iren-&gt;Initialize();<BR>&gt; &gt; &nbsp; iren-&gt;Start();<BR>&gt; &gt; &nbsp;&nbsp;return 0;<BR>&gt; &gt; }<BR>&gt; <BR>&gt; Welcome to VTK!<BR>&gt; <BR>&gt; First, I strongly recommend that you use smart pointers:<BR>&gt; http://vtk.org/Wiki/VTK/Tutorials/SmartPointers<BR>&gt; <BR>&gt; Second, that doesn't sound to me like it is failing during the<BR>&gt; reconstruction. I'd put an -&gt;Update() after everything and step<BR>&gt; through with a debugger to see exactly where that error occurs:<BR>&gt; <BR>&gt; e.g.<BR>&gt; <BR>&gt; vtkSmartPointer&lt;vtkDICOMImageReader&gt; Dicom Reader =<BR>&gt; vtkSmartPointer&lt;vtkDICOMImageReader&gt; :: New();<BR>&gt; DicomReader -&gt; SetDirectoryName("D:/Data/CT");<BR>&gt; DicomReader -&gt;Update();<BR>&gt; <BR>&gt; Let us know what you find out.<BR>&gt; <BR>&gt; Thanks,<BR>&gt; <BR>&gt; David<BR><BR><BR>

<HR>
<BR>
搜索本应是彩色的,快来体验新一代搜索引擎-必应,精美图片每天换哦! <A href="http://cn.bing.com/?form=CRMADS">立即试用!</A><BR>                                               <br /><hr />使用新一代 Windows Live Messenger 轻松交流和共享! <a href='http://www.windowslive.cn/messenger/' target='_new'>立刻下载!</a></body>
</html>