マルチパッチ → COLLADA(Multipatch To Collada) (変換)
サマリ
1 つ以上のマルチパッチ フィーチャを出力フォルダ内の COLLADA(*.dae)ファイルと参照されているテクスチャ画像ファイルのコレクションに変換します。入力として、レイヤまたはフィーチャクラスのいずれかを指定できます。
使用法
-
COLLADA ファイルは、3D オブジェクトの XML 表現であり、3D ジオメトリ上にドレープされたテクスチャとして機能する追加の画像ファイルの参照が可能です。そのため、マルチパッチ フィーチャを COLLADA にエクスポートすると、3D オブジェクトの XML 表現が格納されている *.dae ファイル、テクスチャが格納されている 1 つまたは複数の画像ファイル(たとえば、*.jpg ファイルや *.png ファイル)など、いくつかのファイルを作成することが可能です。
このツールでは、エクスポートしたマルチパッチ フィーチャごとに 1 つの COLLADA 表現が作成されます。このツールは、各フィーチャからのフィールド値(デフォルトでは、オブジェクト ID)を使用して、出力ファイル名を定義します。このフィールド値は、どの COLLADA ファイルからどのフィーチャがエクスポートされたかを識別しやすくするうえで有効です。また、複数のフィーチャを同じディレクトリにエクスポートするときに一意の名前を定義する方法も提供します。テクスチャ ファイルは COLLADA ファイルと同じディレクトリに格納されます。エクスポート ファイルの合計サイズを最小化するには、複数の COLLADA ファイルで使用されているテクスチャ(レンガや窓が繰り返されたテクスチャなど)を一度だけエクスポートしてから、適用可能な DAE ファイルで参照します。
このツールでは、同じファイル名の既存の COLLADA ファイルが自動的に上書きされます。この上書きが発生した場合、エクスポート処理中に新しいファイルで上書きされたファイルを示す警告メッセージが表示されます。エクスポートに失敗したフィーチャについての GP メッセージが生成されるのは、たとえば、出力場所が読み取り専用だったりディスクの空き領域が不足していたりした場合です。
エクスポートされたすべてのマルチパッチ フィーチャ用に新しい COLLADA ファイルが作成されるようにするには、作成先ディレクトリを空のフォルダつまり新しいフォルダに設定して、フィーチャごとに一意のファイル名フィールドを選択します。属性値が同じである 2 つのフィーチャをエクスポートすると、先にエクスポートされた COLLADA ファイルが 2 番目にエクスポートされたフィーチャで上書きされます。
マルチパッチ フィーチャを COLLADA にエクスポートして ArcGIS 外部で変更を行って、繰り返し対話操作で更新するときは、毎回同じ場所にフィーチャをエクスポートしてください。そうすることにより、ディスク上に 3D オブジェクトの最新の状態を表す対象のフィーチャ用のファイルが 1 つだけに維持されます。
UTM に格納された建物など、エクスポートされたマルチパッチが投影座標系である場合、WGS84 として座標系を含む KML ファイルも出力フォルダに作成されます。このプロセスは、測地基準系変換を使用しないことに注意してください。測地基準系変換を使用すると、KML を表示するときに位置が一致しなくなる可能性があります。
ヒント:レイヤのマルチパッチを変換する場合、[マルチパッチ → COLLADA(Multipatch To Collada)] ツールはレイヤのレンダラで定義された色を自動的に埋め込みます。たとえば、利用タイプ属性に基づいてレイヤがフィーチャをレンダリングしている場合(たとえば、商業用を赤、居住用を青など)、出力 COLLADA ファイルにはこれらの色が含まれています。表示色は、テクスチャ処理されたマルチパッチ フィーチャとテクスチャ処理されていないマルチパッチ フィーチャの両方に適用され、テクスチャ処理されたマルチパッチ フィーチャでは、フィーチャの基になるテクスチャ ファイルの更新が必要です。単一の表示色(白)を使用すると、テクスチャ処理されたマルチパッチを画像を変更せずにエクスポートできます。
構文
パラメータ | 説明 | データ タイプ |
in_features |
エクスポート対象のマルチパッチ フィーチャ。 | Feature Layer |
output_folder |
出力 COLLADA ファイルとテクスチャ画像ファイルの格納先となるフォルダ。 | Folder |
prepend_source (オプション) | 出力 COLLADA ファイルのファイル名に接頭辞としてソース フィーチャ レイヤの名前を付加します。
| Boolean |
field_name (オプション) |
エクスポートされた各フィーチャに出力 COLLADA ファイル名として使用するフィーチャ属性。フィールドが指定されていない場合は、フィーチャのオブジェクト ID が使用されます。 | Field |
コードのサンプル
次のサンプルは、Python ウィンドウでこのツールを使用する方法を示しています。
import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.MultipatchToCollada_conversion("Sample.gdb/Buildings", "C:/COLLADA",
"PREPEND_SOURCE_NAME", "BldName")
次のサンプルは、スタンドアロン Python スクリプトでこのツールを使用する方法を示しています。
'''*********************************************************************
Name: Convert Multipatch To Collada
Description: Converts multipatch features in an input workspace
to a Collada model.
*********************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
from arcpy import env
# Script variables
inWorkspace = arcpy.GetParameterAsText(0)
try:
# Set environment settings
env.workspace = inWorkspace
# Create list of feature classes in workspace
fcList = arcpy.ListFeatureClasses()
# Determine if the list contained any feature classes
if fcList:
# Iterate through each feature class
for fc in fcList:
# Describe the feature class
desc = arcpy.Describe(fc)
# Determine if feature class is a multipatch
if desc.shapeType is 'MultiPatch':
# Ensure unique name for output folder
outDir = arcpy.CreateUniqueName('collada_dir')
# Specify that collada file is prefixed by source name
prepend = 'PREPEND_SOURCE_NAME'
# Specify the feature attribute used to name Collada files
fldName = 'OID'
#Execute MultipatchToCollada
arcpy.MultipatchToCollada(fc, outDir, prepend, fldName)
else:
print 'There are no feature classes in {0}.'.format(inWorkspace)
except arcpy.ExecuteError:
print arcpy.GetMessages()
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate error information into message string
pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
.format(tbinfo, str(sys.exc_info()[1]))
msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
# Return python error messages for script tool or Python Window
arcpy.AddError(pymsg)
arcpy.AddError(msgs)