Solidworks Simulation API二次开发 - 在一个装配体中获取特定颜色的面的永久ID

Solidworks Simulation API二次开发 - 在一个装配体中获取特定颜色的面的永久ID


背景与问题

在使用 Solidworks Simulation API 进行二次开发时,我们经常需要在一个复杂装配体中获取特定颜色的面的永久 ID(Persistent ID),以便后续应用于边界条件的设置或其他分析。

然而,在装配体中,存在多个子装配体和多个同名但不同配置的零件时,直接从零件中获取的 Face 转换为装配体中的 Entity 时,可能会导致以下问题:

  1. 部分 Face 转换为 Entity 失败,返回 null
    例如:

    Entity swFaceEnt = (Entity)swComp.GetCorrespondingEntity(face);
    

    在部分场景下,swFaceEnt 的值会为 null

  2. 猜测原因

    • 如果装配体中有多个同名文件,SOLIDWORKS 默认可能只会使用某一配置(例如最后保存的配置)进行转换。
    • 只有激活了与装配体引用一致的配置时,才能正确地完成 FaceEntity 的转换。

解决方案

通过以下步骤,可以正确地获取装配体中目标颜色的面的永久 ID:

  1. 激活组件的引用配置

    • 在获取零件中的几何信息之前,需要确保激活零件的引用配置。
    • 使用 Component2.ReferencedConfiguration 获取组件的引用配置,并通过 ModelDoc2.ShowConfiguration2 激活该配置。
  2. 遍历零件中的实体和面

    • 使用 PartDoc.GetBodies2 获取零件中所有实体。
    • 遍历实体的面,通过颜色属性筛选出目标颜色的面。
  3. Face 转换为装配体中的 Entity

    • 使用 swComp.GetCorrespondingEntity(face) 将零件中的 Face 转换为装配体中的 Entity
  4. 获取面对应的永久 ID

    • 使用 ModelDoc2.Extension.GetPersistReference3 获取永久 ID(Persistent ID)。
    • 使用 ModelDoc2.Extension.GetObjectByPersistReference3 通过永久 ID 获取面对象。

实现代码

以下是完整实现代码:

// 遍历装配体中的组件,获取目标颜色的面的永久ID
public void GetFacesWithColor(IAssemblyDoc assemblyDoc, double[] targetColorRgb)
{
   
    
    
    var components = (object[])assemblyDoc.GetComponents(false); // 获取顶层组件
    foreach (Component2 swComp in components)
    {
   
    
    
        // 激活引用配置
        string referencedConfig = swComp.ReferencedConfiguration