1

目的は、xml ファイルから vtkLineSource を使用して線を描画することです。そのため、xml ファイルからベクトルに値を取得し、ネストされたループでベクトルをループして値を取得し、描画の関数に引数として渡します。

ここに私のコードがあります

for ( std::vector<double>::iterator i = tab_recupere_X1.begin();
                       i != tab_recupere_X1.end();
                       i++)
{   
    p0[0]= *i;
    std::cout << "p0[0]"<<p0[0]<<std::endl;



     for (std::vector<double>::iterator j = tab_recupere_Y1.begin();
                       j != tab_recupere_Y1.end();
                       j++)
   {
       p0[1] = *j;
       std::cout << "p0[1]"<<p0[1]<<std::endl;
      // break;

       for (std::vector<double>::iterator k = tab_recupere_X2.begin();
                       k != tab_recupere_X2.end();
                       k++)
         {
            p1[0] = *k;
            std::cout << "p1[0]"<<p1[0]<<std::endl;


            for (std::vector<double>::iterator p =  tab_recupere_Y2.begin();
                       p != tab_recupere_Y2.end();
                       p++)

           {


            p1[1] = *p;

            std::cout << "p1[1]"<<p1[1]<<std::endl;




            vtkSmartPointer<vtkLineSource> lineSource = 
                vtkSmartPointer<vtkLineSource>::New();
            lineSource->SetPoint1(p0);
            lineSource->SetPoint2(p1);
            lineSource->Update();

             vtkSmartPointer<vtkPolyDataMapper> mapper =             vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(lineSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor = 
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetLineWidth(4);

vtkSmartPointer<vtkRenderer> renderer = 
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow = 
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);

renderer->AddActor(actor);

renderWindow->Render();
renderWindowInteractor->Start();


     }



         }

  }

}

しかし、最後のループは停止せずに無期限に実行され、何も描画されていません。(ブレイク)を使用しましたが、何も改善されませんでした。

私の目的は、反復ごとに x と y の値を取得し、線を引くことです。

助けてください!前もって感謝します。

4

1 に答える 1

0

わかりました。コードの何が問題なのかを理解するのは少し難しいと思います。明らかなことは何もわかりませんが(おそらく他の誰かがそうするでしょう)、何が起こっているのかを知るのに役立ついくつかのポイントがあります:

  • 最後のループで (反復子 p を使用して) すべての関数をコメントアウトしようとしましたか? そうするとき、それは機能していますか?

  • おそらく、この大きなループで表示を行いたくないでしょう。すべてをビルドまたは描画してから、終了したときにのみ表示する必要があります。

  • このコードをリファクタリングするのは良い考えです。現在何をしているのかはわかっているかもしれませんが、6 か月後はどうでしょうか? たとえバグ修正が 1 文字だったとしても、このコードを見た他の誰かがおそらくそれを理解することをあきらめるか、自分ですべてを書き直すだろうという事実については言及していません。

于 2013-06-20T23:30:25.420 に答える