エンティティ名
既定では、CUBITのジオメトリエンティティは、たとえば「draw surface 1」のようにエンティティ種類(Surface、Volumeなど)とIDで参照します。ただし、特定エンティティを扱いやすくするため、ジオメトリエンティティに名前を付けることもできます。名前を付けると、CUBITコマンド内でエンティティ種類と番号の代わりにその名前を使用できます。たとえばsurface 1に'mysurf1'という名前を付けた場合、上のコマンドは「draw mysurf1」と同じです。さらに、エンティティ名はジオメトリと一緒に保存されるため、ジオメトリエンティティの永続的な識別子としても利用できます。名前は次のコマンドで追加または削除できます。
{Group|Body|Volume|Surface|Curve|Vertex} {Name | Rename} {`<entity_name>'| Default}
{Group|Body|Volume|Surface|Curve|Vertex} Remove Name {`<entity_name>'| All | Default}
各トポロジーエンティティの名前はListコマンドの出力に表示されます。また、トポロジーエンティティには名前をラベル表示することもできます( label コマンド参照)。現在割り当てられているすべての名前と、それに対応するエンティティ種類およびIDの一覧(必要ならエンティティ種類で絞込み)は、次のコマンドで取得できます。
List Names [{Group|Body|Volume|Surface|Curve|Vertex|All}]
注:
- merge操作では、残るエンティティに削除されたエンティティの名前も引き継がれます。
- 1つのジオメトリエンティティに複数の名前を付けられますが、1つの名前が参照できるエンティティは1つだけです。
大文字・小文字を区別しない名前
CUBITのエンティティ名は大文字・小文字を区別しません。つまり'mysurf1'と'MySurf1'に違いはありません。ただし表示時の大文字・小文字は割り当てたまま保持されます。たとえばvolumeに'MyVolume'という名前を付けると表示も'MyVolume'ですが、'MYVOLUME'、'mYvOlume'など任意の大文字・小文字の組合せで参照できます。大文字・小文字の区別は次のコマンドでオン/オフできます。
[Set] Case Sensitive Names [on|OFF]
有効な名前と無効な名前
エンティティ名には任意の文字列を使えますが、コマンド内で直接使用できるのは有効な名前だけです。有効な名前は英字またはアンダースコア(_)で始まり、その後に0文字以上の英字、数字、または「.」「_」「:」「@」を続けたものです。無効な名前を割り当てようとすると、CUBITは無効な文字をアンダースコアに置き換えて有効な版を生成し、有効版と無効版の両方をエンティティへ割り当てます。たとえばvolumeに「123#」を割り当てると、「123#」と「_23_」の2つの名前を持ちます。有効な名前はコマンドで直接使用できます(mesh _23_)が、無効な名前を参照するにはより長い構文(mesh volume with name "123#")が必要です。
重複名の調整
異なる2つのエンティティに同じ名前を割り当てようとすると、2つ目の名前に一意化用のsuffixが追加されます。suffixは「@」の後に1文字以上の英字または数字を付けたものです。たとえば次のコマンドでは、volume 1~3にそれぞれ「hinge」「hinge@A」「hinge@B」が割り当てられます。
volume 1 name "hinge"
volume 2 name "hinge"
volume 3 name "hinge"
この自動的な名前の「修正」を無効にするには、 Fix Duplicate Names フラグをoffにします。フラグがoffの状態で重複名を割り当てようとした場合、名前は変更されません。
Set Fix Duplicate Names [ON|Off]
名前の自動作成
CUBITには、エンティティ作成時に名前を自動で割り当てるオプションがあります。このオプションは次のコマンドで制御します。
Set Default Names {On|OFF}
このオプションをonにすると、エンティティ種類とエンティティIDを連結した既定名(例:'cur1'、'surf26'、'vol62')が割り当てられます。
名前の自動作成
CUBITはwebcutを通じて名前を自動的に伝播します。「Gear」という名前を付けたエンティティをwebcutで分割すると、生成されたbodyは「Gear」と「Gear@A」という名前になります。次の例を試してください。
br x 10
volume 1 name "Cube"
webcut volume 1 xplane
webcut volume 1 2 yplane
webcut volume 1 2 3 4 zplane
label volume name
図1. Webcutによる名前の伝播
ワイルドカードを使用すると、伝播した名前に対して次のように操作できます。
mesh volume with name 'Cube*'
block 1 volume with name 'Cube*'
エンティティへのnamespace適用
namespaceコマンドでは、「::」を区切り文字としてエンティティ名の先頭にnamespaceを付けるための操作を提供します。使用できるnamespaceコマンドは次のとおりです。
- namespace push "<name>" - namespaceをstackに追加します。
- namespace pop - stack最上位のnamespaceを削除します。
- namespace "<current_name> rename "<new_name>"" - ジオメトリ上の指定namespaceをすべて別名に変更します。
- namespace "<name>" strip - 指定namespaceをすべてのジオメトリから削除します。
- list namespace - stack上のnamespaceを一覧表示します。
- clear namespace - stackを消去します。
stack最上位のnamespaceは、エンティティに既存の名前がある場合、その先頭に付加されます。新しく作成されるすべてのエンティティにもnamespaceが適用されます。これはwebcutで新規作成されたエンティティを追跡する場合に特に便利です。例:
brick x 1 volume 1 name 'part' namespace push 'left' webcut volume 1 plane xplane
新しいvolume 2の名前は left::part.
処理を次のように続けると、
namespace push 'top' webcut vol all plane yplane
新たに作成された2つのvolumeの名前は top::part
および top::left::part となります。新しく作成されたオブジェクトのIDを確認したい場合は、次のようなコマンドを使用できます。
list volume with name "top*" ids
重複名を持つジオメトリでは、従来どおり「@」と文字を付けたsuffixが追加されます。
namespaceと 名前の自動作成 を併用すると、下位次元エンティティをnamespaceで識別し、操作を通じて結果を追跡するのに役立ちます。例:set default names on
brick x 10
volume 1 name 'hole'
namespace push 'hole'
cylinder radius 2 z 12
# named hole::vol2 subtract volume 1 from volume 2
list surface with first_name "hole*"
# the hole surface is named hole::sur7
マージされたエンティティの命名
「platform」と「platform@A」のように同じbase nameを持つエンティティをmergeすると、結果のエンティティには両方の名前が割り当てられます。 set merge base names on コマンドを使用すると、この状況で名前自体もmergeするようCUBITに指示できます。コマンド構文は次のとおりです。
Set Merge Base Names [On|OFF]
例:
brick x 10
vol 1 copy move 10
surf 6 name 'platform'
surf 10 name 'platform'
Surface 10 actually is named platform@A, since we don't want duplicate names
merge all
list surf 6
surface 6に'platform'と'platform@A'の両方の名前が付いていることが分かります。次に、対照的な例を示します。
brick x 10
vol 1 copy move 10
surf 6 name 'platform'
surf 10 name 'platform'
set merge base names on
merge all
list surf 6
surface 6の名前が'platform'だけになっていることが分かります。
