編寫導出器實現 IExportContext,導出模型信息,需獲取 Material 對應的貼圖文件路徑或內存數據。
Material 獲取 AppearanceAssetId。doc.GetElement(AppearanceAssetId) 獲取 Asset 對象(類型 AppearanceAssetElement)。Asset 內包含所有渲染外觀屬性,**貼圖信息在連接屬性中**。// 假設已有 Material mat
ElementId assetId = mat.AppearanceAssetId;
if (assetId != ElementId.InvalidElementId) {
AppearanceAssetElement assetElem = doc.GetElement(assetId) as AppearanceAssetElement;
if (assetElem != null) {
Asset asset = assetElem.GetRenderingAsset(); // 獲取 Asset 實例
// 遍歷所有屬性查找貼圖
for (int i = 0; i < asset.Size; i++) {
AssetProperty prop = asset.GetProperty(i);
if (prop is AssetPropertyDoubleArray4d) { // 色彩類
// ...
} else if (prop is AssetPropertyReference referenceProp) { // 貼圖引用
// 獲取連接的 Asset(類型通常為 BitmapAsset)
Asset connectedAsset = referenceProp.GetConnectedAsset();
if (connectedAsset != null) {
// 從 BitmapAsset 獲取文件路徑
string texturePath = GetBitmapTexturePath(connectedAsset);
}
}
}
}
}
string GetBitmapTexturePath(Asset bitmapAsset) {
// 尋找 "unifiedbitmap_Bitmap" 或類似屬性
AssetPropertyString pathProp = bitmapAsset.FindByName("unifiedbitmap_Bitmap") as AssetPropertyString;
return pathProp?.Value; // 返回文件路徑
}
AppearanceAssetId 可能為 InvalidElementId(無外觀資產)。BitmapAsset 類型。ModelPathUtils 解析為絕對路徑。**核心鏈路:Material → AppearanceAssetId → AppearanceAssetElement → Asset → AssetPropertyReference → BitmapAsset → 文件路徑。**