Bentley二次开发教程22-文件及模型管理-材质、图层

材质

材质主要用于对元素进行材质贴图,以表现实际的材料样式。材质表中包含材质表,材质面板以及材质。而其属性记录了反射等多种属性以表达实际材质效果。

创建材质

当我们需要创建自定义的材质时,对应的,需要依次创建材质表,材质面板以及材质。

csharp 复制代码
public static void CreateMaterial(string unparsed)
{
    DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的dgn文件
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获得当前激活的dgn模型

    MaterialTable createdTable = new MaterialTable(dgnFile);//声明材料表
    createdTable.Name = "Table1";//设置材料表名称
    createdTable.Description = "Description1";//设置材料表描述信息

    Material savedMaterial1 = new Material(dgnModel);//声明材料
    savedMaterial1.Name = "Material5";//设置材料名称
    PaletteInfo pInfo1 = savedMaterial1.GetPalette();//设置材料所在面板信息
    pInfo1.Name = "SavedPalette";//设置材料所在面板名称
    pInfo1.SetSource(dgnFile.GetDocument().GetMoniker());//设置面板源文件域
    pInfo1.Type = PaletteInfo.PaletteType.Dgn;//设置面板类型
    MaterialManager.SaveMaterial(null, savedMaterial1, dgnFile);//保存材料信息

    Material savedMaterial2 = new Material(dgnModel);//声明材料
    savedMaterial2.Name = "Material7";//设置材料名称
    PaletteInfo pInfo2 = savedMaterial2.GetPalette();//设置材料所在面板信息
    pInfo2.Name = "SavedPalette";//设置材料所在面板名称
    pInfo2.SetSource(dgnFile.GetDocument().GetMoniker());//设置面板源文件域
    pInfo2.Type = PaletteInfo.PaletteType.Dgn;//设置面板类型
    MaterialManager.SaveMaterial(null, savedMaterial2, dgnFile);//保存材料信息

    MaterialId materialId = new MaterialId("Material5");//声明材料ID
    createdTable.AddAssignment(new MaterialAssignment(materialId, "Level 1", 0, createdTable.GetRenderDgn()));//将材料分配信息添加到表中
    createdTable.AddAssignment(new MaterialAssignment(new MaterialId("Material7"), "Level 10", 4, createdTable.GetRenderDgn()));//将材料分配信息添加到表中
    MaterialManager.SaveTable(createdTable);//保存材料表
}

本案例中,首先创建了一个名为"Table1"的材质表,然后创建了一个名为"SavedPalette"的材质面板,最后分别创建了名为"Material7"与"Material5",并将材质与图层绑定。

图层

图层材质赋予

使用材质的方式一般来说主要是将材质赋予元素,该方法即可将材质与图层绑定后赋予元素。主要的步骤为在文件中创建指定名称的图层,完成后创建材料,并将材料与图层绑定。命令执行完毕后当给元素赋予该图层后,其材质即为创建的材质。

csharp 复制代码
public static void CreateLevelWithMaterial(string unparsed)
{                        
    DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的dgn文件
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获得当前激活的dgn模型  

    string levelName = "Level 1 :0";//声明字符串指代图层名称
    FileLevelCache flc = dgnModel.GetFileLevelCache();//获得模型中的图层文件缓存
    flc.Write();//将文件写入缓存
    LevelHandle level = flc.GetLevelByName(levelName);//根据图层名称获得图层句柄

    if (!level.IsValid)//判断图层是否有效(若图层无效在则为真)
    {
        EditLevelHandle elh = flc.CreateLevel(levelName);//声明名为levelName的图层
        CreateMaterial(unparsed);//声明材料                
    }
}

public static void CreateMaterial(string unparsed)
{
    DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的dgn文件
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获得当前激活的dgn模型

    MaterialTable createdTable = new MaterialTable(dgnFile);//声明材料表
    createdTable.Name = "Table1";//设置材料表名称
    createdTable.Description = "Description1";//设置材料表描述信息

    Material savedMaterial1 = new Material(dgnModel);//声明材料
    savedMaterial1.Name = "Material5";//设置材料名称
    PaletteInfo pInfo1 = savedMaterial1.GetPalette();//设置材料所在面板信息
    pInfo1.Name = "SavedPalette";//设置材料所在面板名称
    pInfo1.SetSource(dgnFile.GetDocument().GetMoniker());//设置面板源文件域
    pInfo1.Type = PaletteInfo.PaletteType.Dgn;//设置面板类型
    MaterialManager.SaveMaterial(null, savedMaterial1, dgnFile);//保存材料信息

    Material savedMaterial2 = new Material(dgnModel);//声明材料
    savedMaterial2.Name = "Material7";//设置材料名称
    PaletteInfo pInfo2 = savedMaterial2.GetPalette();//设置材料所在面板信息
    pInfo2.Name = "SavedPalette";//设置材料所在面板名称
    pInfo2.SetSource(dgnFile.GetDocument().GetMoniker());//设置面板源文件域
    pInfo2.Type = PaletteInfo.PaletteType.Dgn;//设置面板类型
    MaterialManager.SaveMaterial(null, savedMaterial2, dgnFile);//保存材料信息

    MaterialId materialId = new MaterialId("Material5");//声明材料ID
    createdTable.AddAssignment(new MaterialAssignment(materialId, "Level 1", 0, createdTable.GetRenderDgn()));//将材料分配信息添加到表中
    createdTable.AddAssignment(new MaterialAssignment(new MaterialId("Material7"), "Level 10", 4, createdTable.GetRenderDgn()));//将材料分配信息添加到表中
    MaterialManager.SaveTable(createdTable);//保存材料表
}


图层颜色及线形样式赋予

若我们需要创建一个颜色及线形样式的图层时,需要使用LevelDefinitionLineStyle( )的构造函数实现。大致的流程为:创建图层后对图层的颜色与线形样式进行设置并应用于指定名称的图层上。

csharp 复制代码
public static void CreateLevelWithColorAndLineStyle(string unparsed)
{
    DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的dgn文件
    DgnModel dgnModel = Session.Instance.GetActiveDgnModel();//获得当前激活的dgn模型            

    string levelName = "TestLevel";//声明字符串指代图层名称
    FileLevelCache flc = dgnModel.GetFileLevelCache();//获得模型中的图层文件缓存
    flc.Write();//将文件写入缓存
    LevelHandle level = flc.GetLevelByName(levelName);//根据图层名称获得图层句柄

    if (!level.IsValid)//判断图层是否有效(若图层无效在则为真)
    {
        EditLevelHandle elh = flc.CreateLevel(levelName);//声明名为levelName的图层

        LevelDefinitionColor color = new LevelDefinitionColor(4, dgnFile);//声明图层颜色定义
        elh.SetByLevelColor(color);//设置图层颜色

        elh.ByLevelWeight = 2;//设置图层线宽

        int num = LineStyleManager.GetNumberFromName("Simple 05 V2", dgnFile, true, true);//获得名为Simple 05 V2的线样式索引值
        LevelDefinitionLineStyle lineStyle = new LevelDefinitionLineStyle(num, null, dgnFile);//声明图层线样式索引
        elh.SetByLevelLineStyle(lineStyle);//设置图层线样式
    }
}

在本案例中,首先创建了一个名为"TestLevel"的图层,然后设置图层颜色为颜色索引值为4的黄色,设置名为"Simple 05 V2"的样式为该图层的线形样式。

相关推荐
----云烟----2 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024062 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic2 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it2 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康3 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
九鼎科技-Leo3 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
转世成为计算机大神3 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海3 小时前
scala String
大数据·开发语言·scala
qq_327342733 小时前
Java实现离线身份证号码OCR识别
java·开发语言
锅包肉的九珍3 小时前
Scala的Array数组
开发语言·后端·scala