Smart3D V13.1 创建ThreeDModelData图纸并生成Sat文件到本地

/// <summary>
/// 创建StructuralSystem的sat文件
/// </summary>
/// <param name="panelAssembly"></param>
/// <returns></returns>
public static ThreeDModelData CreatSatDrawing(this StructuralSystem ss, DirectoryInfo satSavePath = null)
{
    var sdir = S3DEnv.SystemStructureFolder;
    var myFilter = S3DEnv.SP3DFolders.First(c => c.Name == "My Filters") as FilterFolder;
    var ftName = ss.SystemPathStr().CutRight("/").AsFileName();
    FilterFolder newAddedFd;
    #region//如果分段文件夹下已经存在sat文件,则不再创建
    if (myFilter.ChildFolders.Any(c => c.Name == "StructuralSystem Filter Folder"))
    {
        newAddedFd = myFilter.ChildFolders.FirstOrDefault(c => c.Name == "StructuralSystem Filter Folder");
    }
    else
    {
        newAddedFd = new FilterFolder("StructuralSystem Filter Folder", myFilter);
    }
    Filter ft;
    if (newAddedFd.ChildFilters.Any(c => c.Name == ftName))
    {
        ft = newAddedFd.ChildFilters.First(c => c.Name == ftName) as Filter;
        ft.Delete();
        ClientServiceProvider.TransactionMgr.Commit("Delete the Filter for " + ftName);
    }
    ft = new Filter(ftName, newAddedFd);
    List<BusinessObject> listObjs = new List<BusinessObject>();
    listObjs.Add(ss);
    ReadOnlyCollection<BusinessObject> objCol = new ReadOnlyCollection<BusinessObject>(listObjs);
    ft.Definition.AddHierarchy(HierarchyTypes.System, objCol, true);
    ft.Definition.AddObjectType(S3DEnv.CataLog_MetaDataMgr.GetBOCInfoByPath("ShipStructure\\ShipStructureParts"));
    ft.Definition.AddObjectType(S3DEnv.CataLog_MetaDataMgr.GetBOCInfoByPath("Structure\\Members\\MemberPartPrismatic"));
    #endregion
    satSavePath ??= new DirectoryInfo(S3DEnv.CurDllDir);
    satSavePath = satSavePath.CreateSubdirectory("SystemModelSat").CreateSubdirectory(S3DEnv.ProjectName);
    if (!satSavePath.Exists) satSavePath.Create();
    ClientServiceProvider.TransactionMgr.Commit("");
    var satDn = Path.Combine(satSavePath.FullName, $"{ftName} 3D Model.sat");
    ThreeDModelData sat = new ThreeDModelData(sdir, ModelDataFileFormat.SAT, false, satDn, ft);
    sat.SetUserDefinedName($"{ftName} 3D Model");
    sat.Update(UpdateTypes.FullUpdate);
    return sat;
}

 

public static IEnumerable<SP3DFolder> SP3DFolders => MiddleServiceProvider.SiteMgr.ActiveSite.ActivePlant.PlantModel.Folders.Cast<SP3DFolder>();

public static DeliverableRoot RootDeliverable => (DeliverableRoot)MiddleServiceProvider.SiteMgr.ActiveSite.ActivePlant.PlantModel.RootDeliverable;

 

posted @ 2025-06-27 07:53  南胜NanSheng  阅读(91)  评论(0)    收藏  举报