本帖最后由 天工开发者团队 于 2024-10-29 10:10 编辑
一、前置性代码
创建一个矩形:
- // 创建一个中点为(0,0),长度为0.1,宽度为0.08的矩形
- void CreateRectangle(TGPart::ProfilePtr& pProfile, double cenX = 0.0
- , double cenY = 0.0, double len = 0.1, double width = 0.08);
复制代码- void CreateRectangle(TGPart::ProfilePtr& pProfile, double cenX, double cenY, double len, double width)
- {
- // 添加矩形
- TGFrameworkSupport::Lines2dPtr pLines2d = pProfile->GetLines2d();
- std::array<TGFrameworkSupport::Line2dPtr, 4> lines;
- lines[0] = pLines2d->AddBy2Points(cenX - len / 2, cenY - width / 2, cenX + len / 2, cenY - width / 2);// 底边
- lines[1] = pLines2d->AddBy2Points(cenX + len / 2, cenY - width / 2, cenX + len / 2, cenY + width / 2); // 右边
- lines[2] = pLines2d->AddBy2Points(cenX + len / 2, cenY + width / 2, cenX - len / 2, cenY + width / 2); // 上边
- lines[3] = pLines2d->AddBy2Points(cenX - len / 2, cenY + width / 2, cenX - len / 2, cenY - width / 2); // 左边
- TGFrameworkSupport::Relations2dPtr pRelations2d = pProfile->GetRelations2d();
- for (int i = 0; i < 4; i++)
- {
- TGFrameworkSupport::Line2dPtr pLine = lines[i];
- TGFrameworkSupport::Line2dPtr pNextLine = lines[(i + 1) % 4];
- pRelations2d->AddKeypoint(
- pLine,
- (int)TGConstants::KeypointIndexConstants::igLineEnd,
- pNextLine,
- (int)TGConstants::KeypointIndexConstants::igLineStart,
- true);
- }
- }
复制代码 创建一个一维数组:
- template<typename T>
- _variant_t CreateVariant(T* t, VARENUM em)
- {
- // 暂时支持数量为一的一维数组
- SAFEARRAYBOUND bound = { 1, 0 };
- SAFEARRAY* pSafeArry = SafeArrayCreate(em, 1, &bound);
- SafeArrayPutElement(pSafeArry, &bound.lLbound, t);
- VARIANT var;
- VariantInit(&var);
- var.vt = VT_ARRAY | em;
- var.parray = pSafeArry;
- return _variant_t(var);
- }
复制代码
二、孔
概念:使用孔命令可以构造简单孔、螺纹孔、沉头孔、埋头孔以及锥孔。
API:
- // API 所在数据结构 Holes
- HolePtr AddFinite (// 轮廓,传洞口hole2d结构
- struct Profile * Profile,
- // 孔的方向igLeft基于平面法向igRight基于平面法向反向(平面指的是参考平面)
- enum FeaturePropertyConstants ProfilePlaneSide,
- // 孔深度
- double FiniteDepth,
- // 孔数据,包括孔类型,以及沉头孔和螺纹孔的其他参数
- struct HoleData * Data );
复制代码 使用示例:
- void AddHole()
- {
- Application* application = TGAddinApp::GetTGApp()->GetApplication();
- TGPart::PartDocumentPtr pDoc = application->GetActiveDocument();
- // 新建草图
- TGPart::SketchPtr pSketch = pDoc->Sketches->Add();
- //参考平面
- TGPart::RefPlanePtr pRefplane = pDoc->GetRefPlanes()->Item(3);
- // 轮廓
- TGPart::ProfilePtr pProfile = pSketch->GetProfiles()->Add(pRefplane);
- // 创建一个矩形
- CreateRectangle(pProfile);
- // 拉伸
- CComSafeArray<IDispatch*> aProfiles(1);
- aProfiles[0] = pProfile;
- // 基于不同的轮廓去进行拉伸
- pDoc->Models->AddFiniteExtrudedProtrusion(
- 1,
- aProfiles.GetSafeArrayPtr(),
- TGPart::FeaturePropertyConstants::igRight,
- 0.2);
- // 添加2D洞口
- TGPart::ProfilePtr pHolePro = pDoc->Sketches->Add()->GetProfiles()->Add(pDoc->GetRefPlanes()->Item(2));
- pHolePro->Holes2d->Add(-0.025, 0.03);
- auto status = pHolePro->End(TGPart::ProfileValidationType::igProfileClosed);
- // 获取孔数据并添加新孔
- TGPart::HoleDataCollectionPtr pHoleCol = pDoc->GetHoleDataCollection();
- //
- HoleDataPtr pHoleData = pHoleCol->Add(FeaturePropertyConstants::igRegularHole, 0.006);
- pDoc->Models->Item(1)->Holes->AddFinite(pHolePro, FeaturePropertyConstants::igBoth, 0.1, pHoleData);
- }
复制代码 代码效果图:
三、槽
概念:使用槽命令,在直接建模或顺序建模零件和钣金环境中,沿相切连续的草图方向创建槽特征。
API:
- // API所在数据结构 Slots
- SlotPtr Add (
- struct Profile * Profile,// 槽的轮廓
- enum FeaturePropertyConstants SlotType,// 槽的类型
- enum FeaturePropertyConstants SlotEndCondition,// 槽端部条件
- double SlotWidth,// 槽的宽度
- double SlotOffsetWidth,// 槽的偏移宽度
- double SlotOffsetDepth,// 槽的偏移深度
- enum FeaturePropertyConstants ExtentType,// 第一个范围,槽的延伸方式
- enum FeaturePropertyConstants ExtentSide,// 第一个范围侧
- double FiniteDistance,// 第一个有限距离,延伸距离
- enum KeyPointExtentConstants KeyPointFlags,// 关键点标识类型
- IDispatch * KeyPointOrTangentFace,// 关键点,无则为NULL
- enum FeaturePropertyConstants ExtentType2,// 第二个范围,槽的延伸方式
- enum FeaturePropertyConstants ExtentSide2,// 第一个范围侧
- double FiniteDistance2,// 第二个有限距离
- enum KeyPointExtentConstants KeyPointFlags2,// 第二个关键点标识
- IDispatch * KeyPointOrTangentFace2,// 关键点
- IDispatch * FromFaceOrPlane,// 面或平面定义槽的起点
- enum OffsetSideConstants FromOffsetSide,// 来自的偏移侧
- double FromOffsetDistance,// 来自的偏移距离
- IDispatch * ToFaceOrPlane,// 面或平面
- enum OffsetSideConstants ToOffsetSide,// 到达的偏移侧
- double ToOffsetDistance );// 到达的偏移距离
复制代码 使用示例:
- void AddSlot()
- {
- Application* application = TGAddinApp::GetTGApp()->GetApplication();
- TGPart::PartDocumentPtr pDoc = application->GetActiveDocument();
- // 新建草图
- TGPart::SketchPtr pSketch = pDoc->Sketches->Add();
- //参考平面
- TGPart::RefPlanePtr pRefplane = pDoc->GetRefPlanes()->Item(3);
- // 轮廓
- TGPart::ProfilePtr pProfile = pSketch->GetProfiles()->Add(pRefplane);
- // 创建一个矩形
- CreateRectangle(pProfile);
- // 拉伸
- CComSafeArray<IDispatch*> aProfiles(1);
- aProfiles[0] = pProfile;
- // 基于不同的轮廓去进行拉伸
- pDoc->Models->AddFiniteExtrudedProtrusion(
- 1,
- aProfiles.GetSafeArrayPtr(),
- TGPart::FeaturePropertyConstants::igRight,
- 0.2);
- // 新建草图
- pSketch = pDoc->Sketches->Add();
- pProfile = pSketch->GetProfiles()->Add(pRefplane);
- TGFrameworkSupport::Lines2dPtr pLines2d = pProfile->GetLines2d();
- double cenX = 0.0; // 中心X
- double cenY = 0.0; // 中心Y
- double len = 0.1; // 长
- double width = 0.08; // 宽
- // 添加特征轮廓
- pLines2d->AddBy2Points(cenX - len / 2, cenY, cenX + len / 2, cenY);
- TGPart::SlotsPtr pSlots = pDoc->Models->Item(1)->Slots;
- pSlots->Add(
- pProfile, FeaturePropertyConstants::igRegularSlot, FeaturePropertyConstants::igFormedEnd,
- 0.005, 0.0, 0.0,
- FeaturePropertyConstants::igFinite, FeaturePropertyConstants::igRight,
- 0.2,
- KeyPointExtentConstants::igTangentNormal, NULL,
- FeaturePropertyConstants::igNone, FeaturePropertyConstants::igNone,
- 0.0,
- KeyPointExtentConstants::igTangentNormal,
- NULL, NULL,
- OffsetSideConstants::seOffsetNone,
- 0.0, NULL,
- OffsetSideConstants::seOffsetNone, 0.0
- );
- }
复制代码 代码效果图:
四、倒角
4.1 倒圆角
概念:倒圆允许您将锐利的模型边替换为平滑的倒圆表面,以改进模型外观或功能。
API: - RoundPtr Add(
- long NumberOfEdgeSets,// 倒圆边的数量
- const _variant_t& EdgeSetArray,// 倒圆边的数组
- const _variant_t& RadiusArray,// 倒圆边的对应的半径的数组
- const _variant_t& RollAcrossTangentEdges = vtMissing,
- const _variant_t& RollOrCapAcrossSharpEdges = vtMissing,
- const _variant_t& RollAlongBlendEdges = vtMissing,
- const _variant_t& ApplyVertexBlends = vtMissing);
复制代码 使用示例:
- void AddRound()
- {
- Application* application = TGAddinApp::GetTGApp()->GetApplication();
- TGPart::PartDocumentPtr pDoc = application->GetActiveDocument();
- // 新建草图
- TGPart::SketchPtr pSketch = pDoc->Sketches->Add();
- //参考平面
- TGPart::RefPlanePtr pRefplane = pDoc->GetRefPlanes()->Item(3);
- // 轮廓
- TGPart::ProfilePtr pProfile = pSketch->GetProfiles()->Add(pRefplane);
- // 创建一个中线点为(0,0),长度为0.1,宽度为0.08的矩形
- CreateRectangle(pProfile);
- // 拉伸
- CComSafeArray<IDispatch*> aProfiles(1);
- aProfiles[0] = pProfile;
- // 基于矩形进行拉伸 ,右侧,长度为0.2
- pDoc->Models->AddFiniteExtrudedProtrusion(
- 1,
- aProfiles.GetSafeArrayPtr(),
- TGPart::FeaturePropertyConstants::igRight,
- 0.2);
- // 选择可以倒圆的边
- ExtrudedProtrusionPtr pEx = pDoc->Models->Item(1)->ExtrudedProtrusions->Item(1);
- TGGeometry::EdgesPtr pEdges =
- pEx->Edges[TGGeometry::FeatureTopologyQueryTypeConstants::igQueryRoundable];
- IDispatchPtr s = pEdges->Item(1);
- //倒圆半径 0.05
- double radius = 0.05;
- // 构造参数
- _variant_t edgeSetArray = CreateVariant<IDispatch>(s, VT_DISPATCH);
- _variant_t radiusArray = CreateVariant<double>(&radius, VT_R8);
- // 添加倒圆
- RoundsPtr pRounds = pDoc->Models->Item(1)->GetRounds();
- RoundPtr pRound = pRounds->Add(
- 1, edgeSetArray, radiusArray
- );
- }
复制代码 代码效果图:
4.2 倒斜角
概念:使用倒斜角命令(特征) 可在两个面之间 公共边上构造倒斜角。
API:
- ChamferPtr AddEqualSetback(
- long NumberOfEdgeSets,// 边的数量
- const _variant_t& EdgeSetArray,// 边的数组 IDispatch类型
- double SetbackDistance);// 倒斜角距离
复制代码 使用示例:
- void AddChamfer()
- {
- Application* application = TGAddinApp::GetTGApp()->GetApplication();
- TGPart::PartDocumentPtr pDoc = application->GetActiveDocument();
- // 新建草图
- TGPart::SketchPtr pSketch = pDoc->Sketches->Add();
- //参考平面
- TGPart::RefPlanePtr pRefplane = pDoc->GetRefPlanes()->Item(3);
- // 轮廓
- TGPart::ProfilePtr pProfile = pSketch->GetProfiles()->Add(pRefplane);
- // 创建一个中线点为(0,0),长度为0.1,宽度为0.08的矩形
- CreateRectangle(pProfile);
- // 拉伸
- CComSafeArray<IDispatch*> aProfiles(1);
- aProfiles[0] = pProfile;
- // 基于矩形去进行拉伸
- pDoc->Models->AddFiniteExtrudedProtrusion(
- 1,
- aProfiles.GetSafeArrayPtr(),
- TGPart::FeaturePropertyConstants::igRight,
- 0.2);
- // 选择可以倒斜角的边
- ExtrudedProtrusionPtr pEx = pDoc->Models->Item(1)->ExtrudedProtrusions->Item(1);
- TGGeometry::EdgesPtr pEdges =
- pEx->Edges[TGGeometry::FeatureTopologyQueryTypeConstants::igQueryRoundable];
- IDispatchPtr s = pEdges->Item(2);
- //倒斜角距离 0.01
- double distance = 0.01;
- // 构造参数
- _variant_t edgeSetArray = CreateVariant<IDispatch>(s, VT_DISPATCH);
- // 获取斜角集合
- ChamfersPtr pChamfers = pDoc->Models->Item(1)->GetChamfers();
- // AddEqualSetback 从边缘集数组创建一个或多个倒角对象。
- // AddUnequalSetback 以指定角度创建一个或多个倒角对象
- // AddSetbackAngle 创建一个或多个后退距离不等的倒角对象
- ChamferPtr pChamfer = pChamfers->AddEqualSetback(
- 1,
- edgeSetArray,
- distance
- );
- }
复制代码 代码效果图:
|