【初级教程七】倒角、建孔
本帖最后由 天工开发者团队 于 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 = pLines2d->AddBy2Points(cenX - len / 2, cenY - width / 2, cenX + len / 2, cenY - width / 2);// 底边
lines = pLines2d->AddBy2Points(cenX + len / 2, cenY - width / 2, cenX + len / 2, cenY + width / 2); // 右边
lines = pLines2d->AddBy2Points(cenX + len / 2, cenY + width / 2, cenX - len / 2, cenY + width / 2); // 上边
lines = 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;
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 = 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 = 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 = 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;
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 = 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;
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
);
} 代码效果图:
页:
[1]