5.4 装配体文档的核心操作
装配体文档(AssemblyDocument)的核心是零部件的装配和约束,通过 API 可实现零部件的批量插入、约束添加和位置调整。
5.4.1 创建装配体文档并插入零部件
// 创建装配体文档
AssemblyDocument assyDoc = (AssemblyDocument)_inventorApp.Documents.Add(DocumentTypeEnum.kAssemblyDocumentObject);
AssemblyComponentDefinition assyDef = assyDoc.ComponentDefinition;
// 插入第一个零部件(基础零件)
string partPath = @"D:\InventorFiles\BasePart.part";
ComponentOccurrence baseOcc = assyDef.Occurrences.Add(partPath, _inventorApp.TransientGeometry.CreateMatrix());
baseOcc.Name = "基础零件";
// 插入第二个零部件(子零件)
string subPartPath = @"D:\InventorFiles\SubPart.part";
ComponentOccurrence subOcc = assyDef.Occurrences.Add(subPartPath, _inventorApp.TransientGeometry.CreateMatrix());
subOcc.Name = "子零件";
5.4.2 添加装配约束
装配约束包括配合、对齐、角度等,通过Constraints集合创建:
(1)添加重合约束
// 获取基础零件的一个面
Face baseFace = baseOcc.ComponentDefinition.SurfaceBodies[0].Faces[1];
// 获取子零件的一个面
Face subFace = subOcc.ComponentDefinition.SurfaceBodies[0].Faces[1];
// 添加面重合约束
AssemblyConstraint coincConstraint = assyDef.Constraints.AddCoincidentConstraint(
baseFace, // 参考面1
subFace, // 参考面2
0 // 偏移量
);
(2)添加距离约束
// 获取两个边
Edge baseEdge = baseOcc.ComponentDefinition.SurfaceBodies[0].Edges[1];
Edge subEdge = subOcc.ComponentDefinition.SurfaceBodies[0].Edges[1];
// 添加距离约束
AssemblyConstraint distConstraint = assyDef.Constraints.AddDistanceConstraint(
baseEdge, // 参考边1
subEdge, // 参考边2
20 // 距离值
);
5.4.3 遍历装配体中的零部件
// 遍历所有零部件实例
foreach (ComponentOccurrence occ in assyDef.Occurrences)
{
string info = $"零部件名称:{occ.Name},数量:{occ.Quantity}";
_inventorApp.UserInterfaceManager.MessageBox.Show(info);
// 遍历子零部件(若有)
if (occ.Occurrences.Count > 0)
{
foreach (ComponentOccurrence subOcc in occ.Occurrences)
{
_inventorApp.UserInterfaceManager.MessageBox.Show("子零部件:" + subOcc.Name);
}
}
}
5.5 零件与装配体的批量处理
5.5.1 批量创建零件
// 批量创建10个零件文档
for (int i = 1; i <= 10; i++)
{
PartDocument partDoc = (PartDocument)_inventorApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject);
partDoc.DisplayName = $"批量零件{i}";
// 保存零件
string savePath = $@"D:\InventorFiles\BatchPart{i}.part";
partDoc.SaveAs(savePath, false);
}
5.5.2 批量替换装配体中的零部件
// 遍历装配体中的零部件,替换指定名称的零件
foreach (ComponentOccurrence occ in assyDef.Occurrences)
{
if (occ.Name.Contains("旧零件"))
{
string newPartPath = @"D:\InventorFiles\NewPart.part";
occ.Replace(newPartPath, true);
}
}
2万+

被折叠的 条评论
为什么被折叠?



