机械结构概述
在 ODA Mechanical SDK 中,您可以将几何图形标记并收集到结构化实体中,从而简化复杂图纸的处理。
机械结构是一种机制,允许您将几何图形标记为组件并为标记的几何图形创建组件视图。无论几何图形标记类型如何,标记的几何图形都将出现在 BOM(物料清单)中。
有关收集和标记几何图形的另一种选项,请参阅零件参考文档。
机械结构包括组件和组件视图的概念。组件是为提供结构功能而创建的不可见实体。组件视图是保存几何图形的实体。组件和组件视图都具有层次结构。
此外,机械结构还具有定义和实例的概念。首先创建组件定义和组件视图定义,然后为定义创建实例。此概念提供了重用组件和组件视图的能力。
机械结构的基本操作
所有机械结构操作都通过 Mechanical 的 McadApi 库进行。
机械结构提供以下操作:
- amiCreate2dCompDef – 创建新的组件定义。
- amiInstance2dComp – 根据组件定义创建组件实例。
- ami2DSCreateCompViewDef – 根据先前创建的组件创建组件视图定义。
- ami2DSInstanceCompView – 根据组件视图定义创建组件视图实例。
- ami2DSInstanceAnnotationView – 创建注释视图。
- ami2DSCreateAnnotationViewLabels – 为注释视图创建注释视图标签。
- ami2DSGetViewsInComp – 获取组件中包含的视图。
- ami2DSGetViewName – 获取视图名称。
- ami2DSGetCompViewOwnerDef – 获取组件视图的所有者定义。
- ami2DSGetViewOwnerDef – 获取视图的所有者定义。
- ami2DSGetNextComponentDefinitionName – 获取指定名称之后的组件定义的名称。
- ami2DSGetViewGeomExtents – 获取视图的几何范围。
- ami2DSGetViewDefChildren – 获取视图定义的子项。
- ami2DSCompDefHasComponentViewDefinition – 指示指定的组件定义是否包含某个组件视图定义。
- amiGetCompInstanceByGeom – 通过几何体获取组件实例。
- amiGetMasterCompDef – 获取主组件定义。
- amiGetMasterViewDef – 获取主视图定义。
- amiGetCompDef – 获取指定组件的定义。
- amiGetCompDefChildren – 获取组件定义的子项。
- amiGetCompName – 获取组件的名称。
- amiGetCompOwner – 获取组件的所有者。
- amiIsCompDefMaster – 指示指定的组件定义是否为主组件定义。
- amiIsCompDefFeature – 指示组件定义是否为特征。
- amiIsCompDef2DAssembly – 指示组件定义是否为二维装配体。
- amiIsCompDefExternal – 指示组件定义是否为外部的。
- amiSetCompDefName – 为组件定义设置新名称。
简单机械结构示例
本节提供了一个创建、标记、收集几何体并将其放入 BOM 表的示例。
首先,应创建一些基本几何体,例如同一细节的顶视图和前视图的圆和线:
OdGeVector3d topPos(200.0, 100.0, 0.0);
OdGeVector3d frontPos(400.0, 100.0, 0.0);
OdDbCirclePtr pCircle1 = OdDbCircle::createObject();
pCircle1->setDatabaseDefaults(pDb);
pCircle1->setCenter(topPos.asPoint());
pCircle1->setRadius(50.0);
pTMModelSpace->appendOdDbEntity(pCircle1);
OdDbLinePtr pLine1 = OdDbLine::createObject();
pLine1->setDatabaseDefaults(pDb);
pLine1->setStartPoint(frontPos.asPoint() + OdGeVector3d(-50.0, .0, .0));
pLine1->setEndPoint(frontPos.asPoint() + OdGeVector3d(50.0, .0, .0));
pTMModelSpace->appendOdDbEntity(pLine1);
几何体创建后,也可以创建并实例化组件。此示例演示了一个组件和两个附加组件视图的创建过程:
AmiCompDefKeyPtr pCompDefKey1;
AmiCompKeyPtr pCompKey1;
amiCreate2dCompDef(pDb, pCompDefKey1, L"CIRCLE_COMPONENT");
amiInstance2dComp(pDb, pCompKey1, pCompDefKey1, AmiCompDefKeyPtr());
创建组件后,也可以创建第一个组件视图(顶视图):
OdGeMatrix3d compMatrix1;
compMatrix1.setTranslation(topPos);
AmiCompViewDefKeyPtr pComp1TopDef;
AmiCompViewKeyPtr pComp1Top;
OdArray<AmiFolderKey> arrayFolders;
OdDbObjectIdArray entities;
entities.append(pCircle1->objectId());
ami2DSCreateCompViewDef(pDb,
pComp1TopDef,
pComp1Top,
pCompKey1,
entities,
arrayFolders,
compMatrix1,
AmiFolderKeyPtr(),
L"Top");
附加组件视图(前视图):
OdGeMatrix3d compMatrixFront;
compMatrixFront.setTranslation(frontPos);
AmiCompViewDefKeyPtr pComp1FrontDef;
AmiCompViewKeyPtr pComp1Front;
OdArray<AmiFolderKey> arrayFoldersFront;
OdDbObjectIdArray entitiesFront;
entitiesFront.append(pLine1->objectId());
ami2DSCreateCompViewDef(
pDb,
pComp1FrontDef,
pComp1Front,
pCompKey1,
entitiesFront,
arrayFoldersFront,
compMatrixFront,
AmiFolderKeyPtr(),
L"Front");
组件完成后,可以创建包含该组件的BOM表:
AcmBOMManagerPtr pBomMgr = getAcmBomMgr();
OdDbObjectId bomId;
pBomMgr->createBomTable(bomId, OdDbObjectId::kNull, OD_T("MAIN"), true, pDb);
数据库字典中新BOM表(带组件行)的物理表示:

您可以在我们的文档中找到更多信息。