Revit & Navisworks 二次开发—获取材质贴图

简介: Revit & Navisworks 二次开发—获取材质贴图

Retrieving textures via Navisworks API (no solution)

关于Revit API 获取材质贴图位图 bitMap(可行)

代码如下:

string[] targetMaterialNames = {
    // A standard Revit material, with 
    // textures in standard paths. 
    "Brick, Common",
    // A material with a single image from 
    // another non-material library path
    "Local Path Material"
  };
  void FindTextureBitmapPaths( Document doc )
  {
    // Find materials
    FilteredElementCollector fec 
      = new FilteredElementCollector( doc );
    fec.OfClass( typeof( Material ) );
    IEnumerable<Material> targetMaterials 
      = fec.Cast<Material>().Where<Material>( mtl => 
        targetMaterialNames.Contains( mtl.Name ) );
    foreach( Material material in targetMaterials )
    {
      // Get appearance asset for read
      ElementId appearanceAssetId = material
        .AppearanceAssetId;
      AppearanceAssetElement appearanceAssetElem 
        = doc.GetElement( appearanceAssetId )
          as AppearanceAssetElement;
      Asset asset = appearanceAssetElem
        .GetRenderingAsset();
      // Walk through all first level assets to find 
      // connected Bitmap properties.  Note: it is 
      // possible to have multilevel connected 
      // properties with Bitmaps in the leaf nodes.  
      // So this would need to be recursive.
      int size = asset.Size;
      for( int assetIdx = 0; assetIdx < size; assetIdx++ )
      {
        AssetProperty aProperty = asset[assetIdx];
        if( aProperty.NumberOfConnectedProperties < 1 )
          continue;
        // Find first connected property.  
        // Should work for all current (2018) schemas.  
        // Safer code would loop through all connected
        // properties based on the number provided.
        Asset connectedAsset = aProperty
          .GetConnectedProperty( 0 ) as Asset;
        // We are only checking for bitmap connected assets. 
        if( connectedAsset.Name == "UnifiedBitmapSchema" )
        {
          // This line is 2018.1 & up because of the 
          // property reference to UnifiedBitmap
          // .UnifiedbitmapBitmap.  In earlier versions,
          // you can still reference the string name 
          // instead: "unifiedbitmap_Bitmap"
          AssetPropertyString path = connectedAsset[
            UnifiedBitmap.UnifiedbitmapBitmap] 
              as AssetPropertyString;
          // This will be a relative path to the 
          // built -in materials folder, addiitonal 
          // render appearance folder, or an 
          // absolute path.
          TaskDialog.Show( "Connected bitmap", 
            String.Format( "{0} from {2}: {1}", 
              aProperty.Name, path.Value, 
              connectedAsset.LibraryName ) );
        }
      }
    }
  }

能获取到计算机中位图 bitmap 的路径,但通常是相对路径,C:\Program Files (x86)\Common Files\Autodesk Shared\Materials\Textures,这是Revit默认的材质库,当然用户也可以自定义渲染外观的路径;也会出现绝对路径的情况,也就是贴图文件既不在默认材质库文件夹中,也不在用户添加的渲染外观路径下。


对于绝对路径,我们可以直接找到它,而对于相对路径,我需要做一些逻辑判断,首先判断默认的材质库中是否有该文件,如果没有,再读取 Revit.ini (Initialization File 初始化文件)文件来找到用户定义的其他渲染外观路径,接着在这些路径下找到对应的贴图文件。


20191213155237286.png


Revit.ini 路径: C:\Users\11204\AppData\Roaming\Autodesk\Revit\Autodesk Revit 2018


20191213155157917.png



目录
打赏
0
0
0
0
6
分享
相关文章
深入了解 Three.js 中的材质与光照
Three.js 是一个强大的 JavaScript 库,用于在浏览器中创建和渲染 3D 场景。它的易用性和灵活性使得开发者能够轻松构建丰富的视觉体验。在 Three.js 中,材质与光照是影响物体外观和场景氛围的关键因素。本文将深入探讨 Three.js 中的材质类型、光源类型、光照模型,以及如何将它们结合以实现逼真的效果。
121 4
|
7月前
|
API
【threejs教程】让你的场景及物体拥有质感:聊聊threejs中的基础网络材质!
【8月更文挑战第5天】threejs中的基础网络材质教程
94 3
|
7月前
|
API
【threejs教程】让你的场景五颜绿色:纹理贴图与环境贴图
【8月更文挑战第6天】【threejs教程】让你的场景五颜绿色:纹理贴图与环境贴图
352 11
|
10月前
使用html+css制作一个发光立方体特效
使用html+css制作一个发光立方体特效
80 2
在线GLTF模型材质编辑工具
模型材质贴图的作用是为三维模型赋予外观表面的纹理和颜色。它可以增加模型的细节、真实感和视觉效果,使得模型更具有逼真和吸引力。通过贴图,模型可以呈现出不同的材质,如金属、木材、布料等,并且能够模拟反射、阴影和光照效果,使模型在渲染过程中更加真实。贴图还可以用来描绘模型的细节纹理,例如皮肤的纹理、衣物的图案等。总之,模型材质贴图对于创造逼真的三维模型非常重要。
217 1
透明度和透明贴图制作玻璃水杯
模型透明度是控制整个模型的透明度属性,而透明贴图是一种贴图技术,用于控制模型表面每个像素的透明度级别。透明贴图可以与模型的透明度属性结合使用,以实现更复杂和精细的透明效果。通过调整透明贴图的透明度通道,可以实现模型表面不同部分的个性化透明度设置。
166 0
【Three.js入门】标准网格材质、置换贴图、粗糙度贴图、金属贴图、法线贴图
【Three.js入门】标准网格材质、置换贴图、粗糙度贴图、金属贴图、法线贴图
549 0
Revit二次开发DockableDialog (可停靠窗体)
Revit二次开发DockableDialog (可停靠窗体)
Revit二次开发DockableDialog (可停靠窗体)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等