首页 > 其他分享 >布尔数据 BOPDS_DS

布尔数据 BOPDS_DS

时间:2023-09-23 17:33:25浏览次数:35  
标签:aIt 相交 BOPDS 数据 DS 布尔

布尔数据 BOPDS_DS

eryar@163.com

1 Introduction

在OpenCASCADE中,布尔相关的算子Operator有General Fuse Operator(GFA),Boolean Operator(BOA),Section Operator(SA),Splitter Operator(SPA),这些布尔算子都共用一套数据结构BOPDS_DS,其中存储了输入数据及中间结果数据。布尔算子包含两部分:

  • Intersection Part(IP)相交部分:相交部分IP主要用来计算模型之间的相交情况,并将计算结果保存到BOPDS_DS中;
  • Building Part(BP)构建部分:构建部件BP从BOPDS_DS中获取相交和其他数据来构建相应的结果;

由此可见,布尔数据BOPDS_DS是布尔操作中的数据中转站,将布尔操作的输入数据及中间计算结果数据都保存起来。本文主要介绍BOPDS_DS保存的数据。

 

2 BOPDS_DS

BOPDS_DS中存储的信息有:

  • Arguments:输入模型数据;
  • Shapes:模型信息;
  • Interferences:相交数据;
  • Pave Blocks:字面意思是铺路砖,我理解的是对边Edge分块;
  • Common Blocks:公共部分,边与边,边与面的重叠部分;

这里的Shapes是模型信息BOPDS_ShapeInfo,存储模型类型,包围盒等数据:

这里应该不需要再另外保存myType,因为在myShape中可以直接获取类型信息。模型信息在初始化函数Init()中来设置,主要是包围盒等信息:

//=======================================================================
//function : Init
//purpose  : 
//=======================================================================
void BOPDS_DS::Init(const Standard_Real theFuzz)
{
  Standard_Integer i1, i2, j, aI, aNb, aNbS, aNbE, aNbSx;
  Standard_Integer n1, n2, n3, nV, nW, nE, aNbF;
  Standard_Real aTol, aTolAdd;
  TopAbs_ShapeEnum aTS;
  TopoDS_Iterator aItS;
  TColStd_ListIteratorOfListOfInteger aIt1, aIt2, aIt3;
  TopTools_ListIteratorOfListOfShape aIt;
  BOPDS_IndexRange aR;
  Handle(NCollection_BaseAllocator) aAllocator;
  TopTools_MapOfShape aMS;
  //
  // 1 Append Source Shapes
  aNb=myArguments.Extent();
  if (!aNb) {
    return;
  }
  //
  myRanges.SetIncrement(aNb);
  //
  aNbS=0;
  aIt.Initialize(myArguments);
  for (; aIt.More(); aIt.Next()) {
    const TopoDS_Shape& aSx=aIt.Value();
    //
    aNbSx=0;
    TotalShapes(aSx, aNbSx, aMS);
    //
    aNbS=aNbS+aNbSx;
  }
  aMS.Clear();
  //
  myLines.SetIncrement(2*aNbS);
  //-----------------------------------------------------scope_1 f
  aAllocator=
    NCollection_BaseAllocator::CommonBaseAllocator();
  //
  //
  i1=0; 
  i2=0;
  aIt.Initialize(myArguments);
  for (; aIt.More(); aIt.Next()) {
    const TopoDS_Shape& aS=aIt.Value();
    if (myMapShapeIndex.IsBound(aS)) {
      continue;
    }
    aI=Append(aS);
    //
    InitShape(aI, aS);
    //
    i2=NbShapes()-1;
    aR.SetIndices(i1, i2);
    myRanges.Append(aR);
    i1=i2+1;
  }
  //
  aTolAdd = Max(theFuzz, Precision::Confusion()) * 0.5;
  myNbSourceShapes = NbShapes();
  //
  // 2 Bounding Boxes
  //
  // 2.1 Vertex
  for (j=0; j<myNbSourceShapes; ++j) {
    BOPDS_ShapeInfo& aSI=ChangeShapeInfo(j);
    //
    const TopoDS_Shape& aS=aSI.Shape();
    //
    aTS=aSI.ShapeType();
    //
    if (aTS==TopAbs_VERTEX) {
      Bnd_Box& aBox=aSI.ChangeBox();
      const TopoDS_Vertex& aV=*((TopoDS_Vertex*)&aS);
      const gp_Pnt& aP=BRep_Tool::Pnt(aV);
      aTol = BRep_Tool::Tolerance(aV);
      aBox.SetGap(aTol + aTolAdd);
      aBox.Add(aP);
    }
  }

在初始化函数中通过两个递归函数TotalShapes()和InitShape()来收集所有模型数据,然后再分别计算点、边、面的包围盒。这些包围盒数据为后面使用BVH相交检测做准备。

3 Interferences

相交数据Interferences主要用来保存求交结果数据,使用了简单的派生关系,不同的相交类型得到不同的相交结果。

保存的数据有:

其中Index1和Index2为相交的两个模型在BOPDS_DS中的索引号。对于点Vertex和边Edge的相交结果,保存了相交点在边上的参数myParam:

 

4 DRAW

在DRAW中输入相关的命令可以方便地对这些数据结构进行Debug。

从源码可以看出,在做求交的初始函数中准备了三部分数据,一个是BOPDS_DS,一个是BOPDS_Iterator,还有一部分是缓存的求交工具的数据IntTools_Context。后面将结合DRAW代码对C++源码调试,分析布尔操作中求交数据BOPDS_DS保存的具体数据。

 

标签:aIt,相交,BOPDS,数据,DS,布尔
From: https://www.cnblogs.com/opencascade/p/BOPDS_DS.html

相关文章

  • CodeForces 1149D Abandoning Roads
    洛谷传送门CF传送门考虑一条\(1\toi\)的路径是否在最小生成树上。称边权为\(a\)的边为轻边,边权为\(b\)的边为重边。轻边若不成环则一定在最小生成树上,因此先把轻边合并,这样形成了若干连通块。那么如果两点在一个连通块,它们只能通过轻边互达。同时,因为是树上路径,所......
  • ES-DSL搜索
    先准备测试数据 创建映射:post:http://localhost:9200/xc_course/doc/_mapping{"properties":{"description":{"type":"text","analyz......
  • 7-DSL语言高级查询
    概述关于DSLDSL(DomainSpecificLanguage)领域专用语言Elasticsearch提供了基于JSON的DSL来定义查询组成叶子查询子句:在特定域中寻找特定的值。复合查询子句:复合查询子句包装其他叶子查询或复合查询,并用于以逻辑方式组合多个查询。基本语法POST/索引名称/_se......
  • # yyds干货盘点 # ChatGPT 实用小案例分享——使用Python重命名附件和统计发票合计金
    大家好,我是皮皮。一、前言前几天在【志军】的星球看到了一个有意思的ChatGPT分享,正好喝Python相关的,一起来看看吧。ChatGPT实用小案例分享。如果你在高德或者滴滴上申请过开票,应该知道它们会给我们发一封邮件,发票和行程单都会放在附件中。由于高德是聚合平台,背后有很多网约车平台,......
  • SAP HanaXFILE:SAP Hana CDS 开发简介
    SAPHanaXFILE:SAPHanaCDS开发简介Posted 2023-02-27 X档案库tags:篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAPHanaXFILE:SAPHanaCDS开发简介相关的知识,希望对你有一定的参考价值。 SAPHanaCDS开发简介一、CDS简介二、CDSVIEW创建模板1......
  • SAP Abap三种方法进行SAP ODATA数据服务发布(DDICRFCCDS)
    SAPAbap三种方法进行SAPODATA数据服务发布(DDICRFCCDS)Posted 2023-04-04 X档案库tags:篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAPAbap三种方法进行SAPODATA数据服务发布(DDICRFCCDS)相关的知识,希望对你有一定的参考价值。 三种方法进行SAPODATA数据......
  • vscode highlight-words 插件
    转载于:https://www.niftyadmin.cn/n/4938901.html?action=onClick设置步骤:按按Ctrl+Shift+P,输入HighlightToggleCurrent,点击右边齿轮图标,进入快捷键页面,点击编辑按钮,按F8,然后按Enter键完成设置其他不变,调整box  "highlightwords.box":{    "light":true, ......
  • #yyds干货盘点#Koa-router 优先级问题
    问题描述在使用Koa-router作为路由遇到了一个优先级问题.如下代码//routerPage.jsfileconstrouter=require("koa-router")router.get("/test",ctx=>{ctx.body="test"})router.get("/router/test",ctx=>{ctx.body="routertest......
  • nods中mysql时间相差8小时
    前言最近在做自己的一个记账项目,后端nestjs中使用typeorm的mysql。当添加记录时,发现所以时间都相差了8小时。后面查了一下资料发现因为默认timezone是用UTC的。所以只需要设置成我们自己的时区即可。解决方法ormconfig.json{"type":"mysql","host":"localhost","po......
  • 完美解决ParserError: Error tokenizing data. C error: Expected 2 fields in line 5
    完美解决ParserError:Errortokenizingdata.Cerror:Expected2fieldsinline53,saw3文章目录报错问题解决方法声明报错问题之前在工作中遇到过这个坑,记录一下问题以及解决方法,不一定针对所有情况都能用,但是可以供大家参考。问题描述如下:ParserError:Errortokenizing......