• Showing Page History #121847

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

オブジェクトリストでオブジェクトの名前が重複しないように連番を振る処理

はじめに

ドローソフトや、CAD、3Dレンダリングソフト等では、キャンバスや3D空間に複数のオブジェクトを配置していくようなソフトの作りになっていることが多いと思います。 それらのオブジェクトはリストで管理できるようになっていて、かつリスト上でリネームができたりすることもよくあると思います。

  • 例:Inkscapeのオブジェクトリスト

example_of_object_list.png

ここで仮に、「オブジェクト名の重複禁止」の要件を含むソフトを作るケースを考えます。 その制約条件下では、リネームにより他のオブジェクトと名前が重複してしまう可能性がありますので、 リネーム処理の際に例えば

  • 名前が重複した場合はにエラーメッセージを出してリネームを強制キャンセルする
  • リネームした名前の末尾に連番を振る

といった処理を加えることになります。 リネームの他にも、外部ファイル等から複数のオブジェクトを一括でインポートしたいときにも同様の処置が必要になるはずです。

そこで、こういう状況で役に立つことを期待して「リネーム、一括インポート時にオブジェクト名が重複しないように連番を振る処理」を作ってみましたので紹介します。

処理例

本プログラムは、オブジェクト名重複チェックと自動リネームを一度に実施する関数 ResolveDuplicateName と、その動作を見るためのGUIサンプルで構成されています。 リネーム処理、一括インポート処理のそれぞれを模した例を示します。

  • リネーム処理

auto_numbering_on_rename.png

  • インポート処理

auto_numbering_on_import.png

ライセンス

  • Boost License v1.0

ソース