将dxf文件中的图元转换到OCC中,并进行偏置操作,判断源曲线类型

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;
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值