当前位置: 首页 > news >正文

opencascade 标注-直线标注、半径标准、角度标注

opencascade 直线标注

在OpenCascade(OCCT)中实现标注功能主要涉及使用其交互服务模块(AIS)和尺寸标注类。以下是关键步骤和示例代码:

显示精度(小数点后几位)

SetDimensionAspect

设置显示颜色

SetCommonColor

1. 创建尺寸标注对象

使用AIS_LengthDimension等类创建线性尺寸标注:

#include <AIS_LengthDimension.hxx>

// 定义两个点或边
gp_Pnt P1(0, 0, 0);
gp_Pnt P2(10, 0, 0);
TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(P1, P2);

// 创建长度标注
Handle(AIS_LengthDimension) lengthDim = new AIS_LengthDimension(edge);

2. 设置标注属性

调整颜色、文字大小等属性:

lengthDim->SetColor(Quantity_NOC_RED);
lengthDim->SetTextHeight(5);
lengthDim->SetArrowSize(3);

3. 显示标注

将标注添加到交互上下文:

Handle(AIS_InteractiveContext) context = ...; // 获取交互上下文
context->Display(lengthDim, Standard_True);

4. 半径/直径标注

使用AIS_RadiusDimensionAIS_DiameterDimension

TopoDS_Face aFace = ...; // 获取圆弧或圆
Handle(AIS_RadiusDimension) radiusDim = new AIS_RadiusDimension(aFace);
context->Display(radiusDim, Standard_True);

5. 更新标注

当几何变化时,更新标注位置或值:

// 修改几何后调用
lengthDim->UpdatePosition();
context->Redisplay(lengthDim, Standard_True);

6. 自定义文本格式

重写AIS_DimensionComputeText方法:

class MyDimension : public AIS_LengthDimension {
  virtual void ComputeText() override {
    // 自定义文本内容或格式
  }
};

7. 交互式标注创建

处理鼠标事件选择几何元素:

void MyInteractor::OnSelectionChanged() {
  // 获取用户选择的边或顶点
  // 创建对应标注类型
}

opencascade 半径标注

在OpenCASCADE中进行半径标注,可以使用AIS_RadiusDimension类。以下是一个半径标注的基本示例代码:

#include <AIS_RadiusDimension.hxx>
#include <BRepPrimAPI_MakeSphere.hxx>
#include <gp_Pnt.hxx>
#include <AIS_InteractiveContext.hxx>

void DisplayRadiusDimension()
{
    // 创建一个球体
    BRepPrimAPI_MakeSphere sphereMaker(gp_Pnt(0, 0, 0), 50.0); // 球心在(0,0,0),半径为50
    TopoDS_Shape sphereShape = sphereMaker.Shape();

    // 创建半径标注
    Handle(AIS_RadiusDimension) radiusDimension = new AIS_RadiusDimension(sphereShape);

    // 设置标注的样式(可选)
    Handle(Prs3d_DimensionAspect) dimensionAspect = new Prs3d_DimensionAspect();
    dimensionAspect->TextAspect()->SetHeight(10.0); // 设置文字高度
    dimensionAspect->SetCommonColor(Quantity_NOC_RED); // 设置标注颜色
    radiusDimension->SetDimensionAspect(dimensionAspect);

    // 显示标注
    Handle(AIS_InteractiveContext) context = ...; // 获取你的AIS_InteractiveContext实例
    context->Display(radiusDimension);
}

角度标注

在OpenCASCADE中进行角度标注,可以使用PrsDim_AngleDimension类。以下是一个完整的代码示例,展示如何在三维空间中创建两条线段,并标注它们之间的角度:

#include <gp_Pnt.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <AIS_Shape.hxx>
#include <PrsDim_AngleDimension.hxx>
#include <Prs3d_DimensionAspect.hxx>
#include <AIS_InteractiveContext.hxx>

void DisplayAngleDimension(Handle(AIS_InteractiveContext) myAISContext)
{
    // 定义三个点
    gp_Pnt p1(0, 0, 0);
    gp_Pnt p2(100, 100, 100);
    gp_Pnt p3(180, 150, 60);

    // 创建两条线段
    TopoDS_Edge edge1 = BRepBuilderAPI_MakeEdge(p1, p2);
    TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(p2, p3);

    // 显示两条线段
    Handle(AIS_Shape) aline1 = new AIS_Shape(TopoDS::Edge(edge1));
    aline1->SetColor(Quantity_NOC_BLUE);
    myAISContext->Display(aline1, false);

    Handle(AIS_Shape) aline2 = new AIS_Shape(TopoDS::Edge(edge2));
    aline2->SetColor(Quantity_NOC_YELLOW);
    myAISContext->Display(aline2, false);

    myAISContext->UpdateCurrentViewer();

    // 创建角度标注
    Handle(PrsDim_AngleDimension) _Dimensioning = new PrsDim_AngleDimension(edge1, edge2);

    // 设置标注样式
    Handle(Prs3d_DimensionAspect) dimensionAspect = new Prs3d_DimensionAspect();
    dimensionAspect->MakeArrows3d(Standard_False);
    dimensionAspect->MakeText3d(false);
    dimensionAspect->TextAspect()->SetHeight(1);
    dimensionAspect->MakeTextShaded(true);
    dimensionAspect->SetCommonColor(Quantity_NOC_RED);
    dimensionAspect->MakeUnitsDisplayed(false);

    _Dimensioning->SetDisplayUnits("deg");
    _Dimensioning->SetDimensionAspect(dimensionAspect);

    // 显示标注
    myAISContext->Display(_Dimensioning, Standard_True);
}

相关文章:

  • STM32+Proteus+DS18B20数码管仿真实验
  • 23页PDF | 国标《GB/T 44109-2024 信息技术 大数据 数据治理实施指南 》发布
  • QML使用ChartView绘制饼状图
  • python-leetcode 23.反转链表
  • 【ubuntu24.04】 强制重启导致大模型的磁盘挂载出错
  • RockyLinux AlmaLinux RedHat 8,9安装图形化
  • Golang的多团队协作编程模式与实践经验
  • 大模型笔记:pytorch实现MOE
  • 华硕笔记本怎么一键恢复出厂系统_华硕笔记本一键恢复出厂系统教程
  • 支持向量机原理
  • NGINX相关的知识点
  • TUSB422 MCU 软件用户指南
  • Java LinkedList(单列集合)
  • 解决 paddle ocr 遇到 CXXABI_1.3.13 not found 的问题
  • 【设计模式】【行为型模式】迭代器模式(Iterator)
  • python卷积神经网络人脸识别示例实现详解
  • 如何避免大语言模型中涉及丢番图方程的问题
  • STM32 I2C通信协议说明
  • 微信小程序自定义tabbar,跳转tabbar后页面加载路径不正确
  • 机械学习基础-5.分类-数据建模与机械智能课程自留
  • 网站 流量攻击/武汉seo首页优化技巧
  • 出境旅游哪个网站做的好/网络推广的话术怎么说
  • 云南网站建设哪家便宜/如何建网站要什么条件
  • 手机产品网站建设/seo如何挖掘关键词
  • 西安专业网站开发公司/网络营销公司是做什么的
  • 做网站如何添加表单/网页设计模板图片