前言
Autodesk Fabrication 是一款产品,它和 Revit 做了集成。这是 SDK 中对于它们集成提供的 API 例子。
内容
Ancillaries
运行命令 Ancillaries 获取预制构件对用的辅助设备: 从 Revit UI 上不能完全找到对应的内容,从字面上猜测,应该是垫圈、连接、铆钉等的设置。 命令文件:Revit 2021 SDK\Samples\FabricationPartLayout\CS\Ancillaries.cs 整体逻辑:
- 确认当前文件有预制零件的配置,
FabricationConfiguration.GetFabricationConfiguration(doc) - 通过点选,选择一个
FabricationPart - 获取辅助设备,
fabPart.GetPartAncillaryUsage() - 获取辅助设备的作用和名称,
ancillaryUsage.UsageType 、config.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 2021 sdk\samples\FabricationPartLayout\CS\ButtonGroupExclusions.cs 核心逻辑:
FabricationConfiguration config = FabricationConfiguration.GetFabricationConfiguration(doc);
IList<FabricationService> allLoadedServices = config.GetAllLoadedServices();
FabricationService selectedService = allLoadedServices.FirstOrDefault(x => x.Name == serviceName);
selectedService.OverrideServiceButtonExclusion(rectangularGroupIndex, i, true);
selectedService.SetServiceGroupExclusions(new List<int>() { roundGroupIndex });
ChangeService
运行命令的结果: 实际上就是修改了服务的类型: 实际效果和UI上的更改服务是一样的:
命令文件:Revit 2021 sdk\samples\FabricationPartLayout\CS\ChangeService.cs 核心逻辑:
FabricationNetworkChangeService applychange = new FabricationNetworkChangeService(doc);
applychange.SetSelection( selIds );
applychange.SetServiceId( allLoadedServices[1].ServiceId );
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 去查找。
备注
用官方的例子,经常死机,有时间可以调查一下。
|