10. 如何用Python在MicroStation中创建新层


在MicroStation中处理复杂项目时,将不同元素组织到不同的层可以提高效率和清晰度。本指南将引导您使用Python以编程方式创建新层。

导入模块

该脚本首先导入几个模块,这些模块提供了与MicroStation交互的函数和类。

from MSPyBentley import *
from MSPyBentleyGeom import *
from MSPyECObjects import *
from MSPyDgnPlatform import *
from MSPyDgnView import *
from MSPyMstnPlatform import *

函数

我们脚本的核心是createLevel()函数,它检查层是否已经存在,如果不存在,则创建它。然后,该脚本将创建的新层写入层缓存中。

def createLevel(levelName):
    ...

1.  当前DGN文件

第一步是获取当前设计文件,即您当前在MicroStation中处理的文件。

dgnFile = ISessionMgr.GetActiveDgnFile()
if dgnFile is None:
    return False

2.  检索层缓存

接下来从当前设计文件中检索层缓存。

levelCache = dgnFile.GetLevelCache()
if levelCache is None:
    return False

3.  检查层名是否存在

如果设计文件中存在这个层名,则获取该层的句柄。

LevelHandle = levelCache.GetLevelByName(levelName)

4.  创建新层

如果设计文件中不存在这个层,则创建该新层并将其写入层缓存中。

 if not LevelHandle.IsValid():
    LevelHandle = levelCache.CreateLevel(levelName, LEVEL_NULL_CODE,  LEVEL_NULL_ID)
    if not LevelHandle.IsValid():
        return False

    levelCache.Write()

5.  返回层ID

最后,返回层ID。确认层创建成功。

return LevelHandle.GetLevelId()

自动创建多个层

我们可以在main函数中使用循环创建多个层。此循环创建了十个名为Level_1到Level_10的层,并打开了“层管理器”对话框。使用此功能,您现在可以轻松地向MicroStation模型添加新层,保持项目的组织性和可管理性。

 def main():
    for i in range(1, 11):
        sLevelName = f"Level_{i}"
        iLevelId = createLevel(sLevelName)
    
    PyCadInputQueue.SendCommand("LEVELMANAGER DIALOG OPEN")

下面是完整的脚本。

import os
import math
import sys
from MSPyBentley import *
from MSPyBentleyGeom import *
from MSPyECObjects import *
from MSPyDgnPlatform import *
from MSPyDgnView import *
from MSPyMstnPlatform import *

# 层创建函数
def createLevel(levelName):
    # 获取当前DGN文件
    dgnFile = ISessionMgr.GetActiveDgnFile()
    if dgnFile is None:
        return False

    # 从DGN文件获取层缓存
    levelCache = dgnFile.GetLevelCache()
    if levelCache is None:
        return False

    # 根据层名获取层句柄
    LevelHandle = levelCache.GetLevelByName(levelName)

    # 如果层句柄无效,则创建层
    if not LevelHandle.IsValid():
        # 创建新层
        LevelHandle = levelCache.CreateLevel(levelName, LEVEL_NULL_CODE, LEVEL_NULL_ID)
        if not LevelHandle.IsValid():
            return False
        
        # 将变更写入层缓存中
        levelCache.Write()

    # 返回层ID
    return LevelHandle.GetLevelId()


# 主函数
def main():
    # 创建层1到10
    for i in range(1, 11):
        sLevelName = f"Level_{i}"
        print (sLevelName)

        # 调用createLevel函数
        iLevelId = createLevel (sLevelName)
        print (iLevelId)
    
    PyCadInputQueue.SendCommand("LEVELMANAGER DIALOG OPEN")


if __name__ == "__main__":
    print ("Create Levels...")
    main()

通过浏览文档,扩展上述代码以对层执行CRUD(创建、读取、更新、删除)操作。
祝您编码愉快!