2

円、線、四角などを描くことができる簡単なCADプログラムのようなものを作りたいと思っています。派手すぎるものはなく、基本的な描画だけです。

どうすればプログラムが作れるか考えていますが、アドバイスが必要です。CADプログラムでは、必要な数の長方形や形状を描画して削除できます。

描画されるすべての図形(線、長方形、多角形)はクラスのインスタンスであり、描画される各形状に色、(x、y)座標などの独自のプロパティを持たせたいので、インスタンスをリストに格納する必要があると考えていました。 、linetypeなど。たとえば、「rect_list」は、クラス「Rectangle」のインスタンスを格納するコンテナです。

プログラムを作成するこの方法の場合、より良いコンテナは何でしょうか?vectorlistまたはdeque

4

3 に答える 3

3

頂点のリストはベクトルにする必要があります(ポイントの数がわかったら、その数を保持するようにベクトルのサイズを変更して塗りつぶします)。次に、これらすべてのベクトルのリストが必要なので、中央に挿入したり、他の方法で操作したりできます効率的にリストします。

しかし...本当に欲しいのはシーングラフです。これは、オブジェクトの 3D ビューを格納する「ツリー ビュー」モデルであるため、どのオブジェクトが他のオブジェクトに関連しているかを簡単に確認できます。また、表示時にどのオブジェクトが他のオブジェクトを非表示にするか (両方を描画する必要はありません)、または画面外にあるオブジェクト (同上) を示すこともできます。

最高のものの 1 つはOpenSceneGraphで、非常に STL に似ています。

于 2012-06-27T22:16:26.740 に答える
3

Qt を使用して、そのシステムで遊ぶことをお勧めしますQGraphicsScene。シーンにはQGraphicsItem子が含まれており、それらには独自の子をさらに含めることができます。メモリと親子関係はあなたのために処理されます。また、空間インデックスも備えているため、たとえば、再描画で必要なオブジェクトのみにすばやくアクセスできます。また、インデックスを使用すると、マウスの位置など、どのオブジェクトのバウンディング ボックスが交差するかをすばやく判断できます。

私は最近、Qt のグラフィック シーン/ビュー システムの特定の側面を使用した2 つの非常に単純な 例を投稿しました。どちらも Qt Creator の空の Qt プロジェクトでコンパイルできる自己完結型のコードです。

于 2012-06-28T02:06:11.830 に答える
2

エンティティをすばやく追加および削除するには、リンクされたリストを検討します。巨大なリストでは、あちこちでエンティティを削除すると、大量のメモリ操作が発生し、プロセス全体が遅くなります...

選択については、リンクされたリストの場合、エンティティ レベルで自動インクリメント整数値を保持する必要があります。

于 2012-06-28T13:25:34.757 に答える