QVector<Handle(Geom2d_Curve)> arrCurve;
QVector<Handle(Geom2d_Curve)> arrOffsetCurve;
for each (auto var in pInfoDxf->m_entities)
{
//entities.insert(index++,var->Clone());
//将数据转换到opencascade中存储数据
if (var->GetType()== EntityType::LineType)
{
//直线
auto ent = reinterpret_cast<Line*>(var);
gp_Pnt2d point1(ent->GetStartPoint().GetX(), ent->GetStartPoint().GetY());
gp_Pnt2d point2(ent->GetEndPoint().GetX(), ent->GetEndPoint().GetY());
gp_Vec2d vector(point1, point2);
Handle(Geom2d_Line) line = new Geom2d_Line(point1, vector);
Handle(Geom2d_TrimmedCurve) TrimLine = new Geom2d_TrimmedCurve(line, 0, vector.Magnitude());
arrCurve << TrimLine;
}
else if (var->GetType() == EntityType::ArcType)
{
//圆弧
auto ent = reinterpret_cast<Arc*>(var);
Handle(Geom2d_Circle) cir = new Geom2d_Circle(
gp_Ax2d(gp_Pnt2d(ent->GetCenter().GetX(),
ent->GetCenter().GetY()), gp_Dir2d(1, 0)), ent->GetRadius());
Handle(Geom2d_TrimmedCurve) TrimCircle = new Geom2d_TrimmedCurve(
cir, ent ->GetStartAngle()* M_PI / 180, ent->GetEndAngle() * M_PI / 180);
arrCurve << TrimCircle;
}
else
{
//其他
}
};
//将当前的线做偏置处理
for each (auto var in arrCurve)
{
//做偏置处理
Handle(Geom2d_OffsetCurve) OffsetCurve = new Geom2d_OffsetCurve(var, 0.2);
//读取偏置后的数据
if (OffsetCurve->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_Line)))
{
qDebug()<<"Line";
}
else if (OffsetCurve->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_Circle)))
{
qDebug() << "Circle";
}
else if (OffsetCurve->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_TrimmedCurve)))
{
//将曲线段转为
Handle(Geom2d_TrimmedCurve) temp =
Handle(Geom2d_TrimmedCurve)::DownCast(OffsetCurve->BasisCurve());
if (temp->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_Line)))
{
qDebug() << "Trim Line";
}
else if (temp->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_Circle)))
{
qDebug() << "Trim Circle";
}
else
{
qDebug() << "Trim Others";
}
}
else
{
qDebug() << "Others";
}
arrOffsetCurve << OffsetCurve;
}
将dxf文件中的图元转换到OCC中,并进行偏置操作,判断源曲线类型
最新推荐文章于 2024-10-28 10:27:45 发布