Revit SDK 介绍:FabricationPartLayout

前言

Autodesk Fabrication 是一款产品,它和 Revit 做了集成。这是 SDK 中对于它们集成提供的 API 例子。

内容

Ancillaries

运行命令 Ancillaries 获取预制构件对应的辅助设备:
Revit SDK 介绍:FabricationPartLayout_第1张图片
从 Revit UI 上不能完全找到对应的内容,从字面上猜测,应该是垫圈、连接、铆钉等的设置。
命令文件:Revit 2021 SDK\Samples\FabricationPartLayout\CS\Ancillaries.cs
整体逻辑:

  1. 确认当前文件有预制零件的配置,FabricationConfiguration.GetFabricationConfiguration(doc)
  2. 通过点选,选择一个 FabricationPart
  3. 获取辅助设备,fabPart.GetPartAncillaryUsage()
  4. 获取辅助设备的作用和名称,ancillaryUsage.UsageTypeconfig.GetAncillaryName(ancillaryUsage.AncillaryId)
    核心代码整理:
// 得到预制相关的配置
FabricationConfiguration config = null;
config = FabricationConfiguration.GetFabricationConfiguration(doc);

// 选择一个预制零件
FabricationPart fabPart = null;
Reference refObj = uidoc.Selection.PickObject(ObjectType.Element, "Pick a fabrication part to start.");
fabPart = doc.GetElement(refObj) as FabricationPart;

// 获取辅助设备
IList<FabricationAncillaryUsage> ancillaries = fabPart.GetPartAncillaryUsage();
List<string> ancillaryDescriptions = new List<string>();

// 创建一个包含辅助设备作用和名称的列表
foreach (var ancillaryUsage in ancillaries)
{
   FabricationAncillaryType ancilType = ancillaryUsage.Type;
   FabricationAncillaryUsageType usageType = ancillaryUsage.UsageType;
   ancillaryDescriptions.Add($"{ancilType.ToString()}: {usageType.ToString()} - "
      + $"{config.GetAncillaryName(ancillaryUsage.AncillaryId)}");
}

ButtonGroupExclusions

运行命令的结果,把特定的按钮和组排除出去,在 UI 上体现为多了一个红色的叉:
Revit SDK 介绍:FabricationPartLayout_第2张图片
命令文件:Revit 2021 sdk\samples\FabricationPartLayout\CS\ButtonGroupExclusions.cs
核心逻辑:

// 通过名称获得对应的 service
FabricationConfiguration config = FabricationConfiguration.GetFabricationConfiguration(doc);
IList<FabricationService> allLoadedServices = config.GetAllLoadedServices();
FabricationService selectedService = allLoadedServices.FirstOrDefault(x => x.Name == serviceName);

// 从 service 排除单个按钮或者一个组
selectedService.OverrideServiceButtonExclusion(rectangularGroupIndex, i, true);
selectedService.SetServiceGroupExclusions(new List<int>() { roundGroupIndex });

ChangeService

运行命令的结果:
Revit SDK 介绍:FabricationPartLayout_第3张图片
实际上就是修改了服务的类型:
Revit SDK 介绍:FabricationPartLayout_第4张图片
实际效果和UI上的更改服务是一样的:

Revit SDK 介绍:FabricationPartLayout_第5张图片
命令文件:Revit 2021 sdk\samples\FabricationPartLayout\CS\ChangeService.cs
核心逻辑:

FabricationNetworkChangeService applychange = new FabricationNetworkChangeService(doc);
// Set the selection of element identifiers to be changed
applychange.SetSelection( selIds );
// Set the service to the second service in the list (ductwork exhaust service)
applychange.SetServiceId( allLoadedServices[1].ServiceId );
// Set the group to the second in the list (round)
applychange.SetGroupId( 1 );
applychange.SetMapOfSizesForStraights( sizeMappings );
applychange.SetMapOfInLinePartTypes( swapinlineIds );
FabricationNetworkChangeServiceResult result = applychange.ApplyChange();

其他命令

ConvertToFabrication.cs

把原生 Revit 构件转成 FabricationPart

ExportToMAJ.cs

输出 MAJ 文件:

ISet<ElementId> exported = FabricationPart.SaveAsFabricationJob(doc, elementIds, filename, new FabricationSaveJobOptions(true));

ExportToPCF.cs

输出 PCF 文件:

FabricationUtils.ExportToPCF(doc, fabParts, filename);

FabPartGeometry.cs

输出几何图形:

IList<Mesh> main = getMeshes(part.get_Geometry(options));
IList<Mesh> ins = getMeshes(part.GetInsulationLiningGeometry());

FabricationPartLayout.cs

自动创建一系列的预制构件。需要将 Revit 切换为英文版才能正常运行,原因是代码里面参数名称写成了英文,而不是通过 id 去查找。
Revit SDK 介绍:FabricationPartLayout_第6张图片

备注

用官方的例子,经常死机,有时间可以调查一下。

你可能感兴趣的:(Revit,SDK,介绍,C#)