OpenCasCade
文章平均质量分 73
小哈龙
一颗勇往直前的心
展开
-
万向节死锁
要理解万向节死锁的产生原因,首先要理解欧拉角变换,欧拉角变换是基于最初始的坐标进行变换而非变换后的坐标进行变换。欧拉角变换需要空间中的三个角(即变换后每个轴的偏移量),另外还有每个轴的变换顺序。值得注意的是,如果按照不同轴的顺序来改变每个角,其变换的结果是不一样的。在Unity中,变换顺序为Y>Z>X所以先对Y轴变换,就不会影响Z和X轴初始时物体:2.正常旋转对Y轴旋转90°:旋转X轴:正常旋转Z轴:正常。转载 2024-05-31 16:31:38 · 128 阅读 · 0 评论 -
OpenCASCADE Draw模块TKDraw项目问题修改
在调试Draw模块代码时,出现一个小问题,导致无法正常运行。原创 2024-05-24 17:34:40 · 240 阅读 · 0 评论 -
OCC -C++ 应用程序性能优化
系统在接收到一定大小内存请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或者分配最适于申请大小的内存块等)找到合适大小的内存块。对于几何造型内核OpenCASCADE,由于会涉及到大量的数值算法,如矩阵相关计算,微积分,Newton迭代法解方程,以及非线性优化的一些算法,如BFGS,FRPR,PSO等等用于多元函数的极值求解,所以这些数值算法的性能直接影响系统的性能。与没有使用内存优化的时候0.1相比,使用了内存优化处理的要快40%左右。转载 2024-04-11 17:27:56 · 107 阅读 · 0 评论 -
OpenCASCADE Connect Edges to Wires
不规则的任意形状的曲面片,只能通过WIRE来限定。两种方式的处理逻辑是不同的,对于第一种依次添加EDGE的方式,则要求添加的EDGE是相连的。功能与ShapeAnalysis_FreeBounds中的ConnectEdgesToWires类似,但多个要求,这些EDGE都是一个FACE上的EDGE,而且对这些EDGE的Orientation也有要求。有时在构造WIRE的时候,拿到的是一些无序的EDGE,如何将无序的EDGE生成WIRE,OpenCASCADE中提供了多种方法,下面分别来对这些方法进行介绍。转载 2024-04-11 17:00:55 · 144 阅读 · 0 评论 -
OpenCASCADE STEP Color
Abstract. STEP AP214的STEP中是带有颜色信息的,OCCT可以读取其中的颜色信息。本文介绍一种比官方XCAFDoc_ColorTool更方便的获取方法。转载 2024-04-11 16:30:04 · 168 阅读 · 0 评论 -
opencascade常用资料整合
KGV大佬将occt draw工具移植到了web端,测试occt编译为webassembly的能力和性能,大佬博客有几篇文章进行了详细解读,我已经翻译并且发布在本人知乎上了。根据作者说是用的.net后端运行的occt,前端用three.js显示的。一个开源CAD技术博客,有很多关于occt的内容,还有其他开源CAD方案的讨论,作者还开发了一个在线CAD工具,不过是用openscad做的。OCCT 12年资深工程师做的教程,是个俄罗斯大佬,一步一步用例子教学,弥补了官方文档案例太少,基本抓瞎的问题。转载 2024-04-11 14:57:08 · 172 阅读 · 0 评论 -
OpenGL用Polygon Offset解决z-fighting和stitching
在OpenGL中,如果想绘制一个多边形同时绘制其边界,可是先使用多边形模式GL_FILL绘制物体,然后使用多边形模式GL_LINE和不同的颜色再次绘制这个多边形。但是由于直线和多边形的光栅化方式不同,导致位于同一位置的多边形和直线的深度值并不相同,进而导致直线有时在多边形的里面,有时在多边形的外面,这种现象就是"Stiching"。转载 2024-03-29 15:48:37 · 212 阅读 · 0 评论 -
OpenCasCade 中 TCollection_HExtendedString、TCollection_ExtendedString与QString的相互转换
在进行Opencascad+QT开发时,会遇到字符串之间的转换,因为Opencascad中有的字符串类型为TCollection_HExtendedString、TCollection_ExtendedString,比如设置名称,而QT用的字符串类型为QString,这就需要转换。为了自己方便查找,所以将这两者的转换写到这里。转载 2024-02-29 10:45:33 · 136 阅读 · 0 评论 -
Open Cascade 获取面的内外环线
在特定应用场景下,需要对于一个拓扑面(TopoDS_Face)其进行补洞或打洞操作,如下图所示。补洞或打洞过程中需要获取面的环线(TopoDS_Wire),本文即介绍如何获取拓扑面的环线及其基本原理。面补洞、打洞示意图。转载 2024-02-23 11:12:52 · 265 阅读 · 0 评论 -
Opencascade 开发中V3d_View的常用方法和代码总结
原文链接:https://blog.csdn.net/m0_52660853/article/details/130999774。转载 2024-02-23 10:56:19 · 222 阅读 · 0 评论 -
OCC三维几何对象工具包TKG3d
Geom_Axis1Placement:定义3D空间的轴;Geom_Axis2Placement:定义一个右手坐标轴;Geom_AxisPlacement:抽象基类,用于定义轴或坐标系;Geom_Direction:定义三维矢量;Geom_Plane:定义三维平面;Geom_Point:点的抽象基类;Geom_CartesianPoint:定义笛卡尔坐标下三维点;Geom_Vector:Geom_Direction的抽象基类;转载 2024-02-18 14:20:44 · 229 阅读 · 0 评论 -
glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)
例如,在调用 glTranslatef(1.0, 0.0, 0.0) 之后,当前矩阵会被更新成平移矩阵,在调用glRotatef(30, 0.0, 1.0, 0.0)之后,当前矩阵会被更新成旋转矩阵。在绘制圆柱体时,需要对每个圆柱体进行不同的平移和旋转变换,所以需要使用glPushMatrix()函数将当前矩阵压入栈中,这样可以保证每个圆柱体之间互不影响。glPushMatrix() 函数将当前矩阵复制一份并压入栈中,这样就可以在之后的操作中使用栈顶的矩阵进行变换而不会影响之前的变换。转载 2024-02-01 14:23:12 · 360 阅读 · 0 评论 -
投影矩阵和视口变换矩阵(math-projection and viewport matrix)
写在前面前面几节分别介绍了,本节继续学习坐标变换过程中的投影变换。这里主要是从数学角度推导投影矩阵。,这里对他的推导思路稍微进行了整理。通过本节可以了解到。转载 2024-01-30 17:08:08 · 399 阅读 · 0 评论 -
OpenCascade拓扑对象之:裁剪环的理解
对一些类型的曲面,例如:平面、圆柱面,可能在一个或两个方向上是无限大的,例如:对平面来说,通常是无限大的面,u、v参数的范围是无限大的;每个TopoDS_Face记录一系列的TopoDS_Wire对象,但这些Wire对象没有明确的区分外环和内环,因为TopoDS_Wire也可能是一个共享对象,可能对一个Face来说是外环,对另一个Face来说是内环(考虑:立方体上的一个孔的和上平面相交的Wire)。其中,通常有一个外环,是区域最外边的轮廓,还有一个或多个内环,表明的是该区域内部的各个孔。转载 2024-01-26 14:54:37 · 193 阅读 · 0 评论 -
OpenCascade拓扑对象之:基于TopoDS_Shape的Map的理解
这里,定义了一个hash表,键值为TopoDS_Shape对象,在该定义中,使用了TopTools_ShapeMapHasher类来作为hash表中的对比类。当对边进行打断时,直接打断共边,生成两个新的TopoDS_TEdge对象,比对有向边进行处理更简洁和合理。因此,在OpenCascade中,会频繁通过建表,获取共享对象,基于共享对象进行处理。因为对共享对象,例如:两个有向边共享一个共边的情况,两个有向边都使用一个TopoDS_TEdge对象,但方向通常是一正一反。转载 2024-01-26 14:45:41 · 169 阅读 · 0 评论 -
OpenCascade拓扑对象之:有向边和共边
在BRep_TEdge类中,不仅记录了通常共边的信息,还记录了邻接信息、参数曲线信息、边的连续性信息等多种信息。对manifold情形,通常两个有向边共用一个共边,两个有向边的方向通常是一正一反(一个有向边和共边同向,一个有向边和共边反向)。有向边和共边的邻接关系,是拓扑结构中一个重要的关系,借助该关系,可以实现例如:遍历共边所邻接的所有Face这样的操作。一个参数范围,是3D曲线上的参数范围,通常Edge是曲线上的一段,特别对无限长的曲线(例如:直线),必须有一个参数域范围。端点对应的Vertex对象。转载 2024-01-26 14:33:39 · 218 阅读 · 0 评论 -
OpenCascade拓扑对象之:拓扑对象方向继承关系
例如:如果一个Face反向了,通常裁剪环Wire也需要反向,Wire中的Edge也需要反向,这样才能保证拓扑结构的正确性。在TopExp_Explorer类的实现总,创建TopExp_Iterator类对象时,传递的cumOri值为默认值,即为true,因此默认是考虑上了父对象的方向的,也因此组合了父对象的方向。例如:Face中当要基于surface进行参数域或裁剪环操作时,通常不考虑Face的方向,基于surface来进行裁剪环的处理,可以省去很多的麻烦。子对象的方向将根据父对象的方向属性而进行调整。转载 2024-01-26 14:32:14 · 139 阅读 · 0 评论 -
OpenCascade拓扑对象之:TopoDS_Shape对象及其子对象
如此一来,要获取子对象所在的父对象,通常需要建表机制,通过遍历父对象的子对象,建立子对象和父对象对应关系的表,例如:遍历Face的Edge,建立Edge和face间的表,从而获得Edge邻接的Face对象列表。例如:Face记录了Edge的共享对象,而Edge又反向记录了Face对象,则会形成循环依赖,当对象自动释放时,可能两者都释放不了,这个是引用计数计数的一个问题。B)出于共享的考虑。首先,该列表放在BopoDS_TShape中,即放在共享对象中,是因为对一些共享对象的子对象,通常也是需要被共享的。转载 2024-01-26 14:19:03 · 307 阅读 · 0 评论 -
OpenCascade 句柄机制
即使不考虑其他拓扑对象的共享,有向边共享共边对象这一事实(Parasolid:Fin和Edge,ACIS:CoEdge和Edge),就导致必须有相应的共享对象管理机制。实体拓扑对象处理中的一个难点,是共享对象的管理,这一点非常重要,对3D几何造型引擎非常关键。如果处理不好,轻则内存泄漏,重则系统不稳定,会因为共享对象产生的内存错误,可能导致莫名的死机问题。这一点,会很影响算法的实现效率。因此,OCCT的拓扑结构实现,采用了单向包含关系,即每个拓扑对象只记录自己的子对象,而子对象不记录对父对象的引用。转载 2024-01-26 14:15:11 · 131 阅读 · 0 评论 -
OpenCascade拓扑对象TopoDS_Shape的三要素
例如:这个可能是一个BRep_TEdge对象,记录了一条共边的数据,包括:一条3D曲线、曲线的参数范围等等数据,或者可能是BRep_TFace对象,记录了一个曲面对象及其相关数据。基于共享的考虑,那么会生成10个TopoDS_Shape对象,每个对象记录相同的BRep_TFace对象,方向可能相同,可能相反,而myLocation记录了如何从原始Face对象经过变换变换到最终对象。对一个TopoDS_Shape对象,通过在定时器中不断改变位置信息,可以实现简单的动画效果,当然,这个的效率是不高的。转载 2024-01-26 13:58:07 · 147 阅读 · 0 评论 -
CAD中“非流形体”几何简介
结构中不同单元连接,接触,复合材料,散热,CFD多流场,EDA,TCAD,在这些分析中,最大的特点是不同属性(不同的材料,几何层,业务属性等)的几何要在一起分析,而且不同属性的几何之间相互接触!传统意义上的几何表达无法处理非流形体,所以在仿真处理中,一般是不同的几何分别生成网格,然后对网格进行合并。Cell结构的特点是,在进行布尔并运算之后,原有的几何都保留,属性也保留,以刚才的两个立方体为例,进行布尔运算之后,公共面会被保留,而且只会保留一个面,两个实体的信息分别存储在各自的Cell信息中。转载 2024-01-26 13:46:25 · 667 阅读 · 0 评论 -
OpenCasCade 包围盒
包围盒是一个简单的几何空间,里面包含着复杂形状的物体。为物体添加包围体的目的是快速的进行碰撞检测或者进行精确的碰撞检测之前进行过滤(即当包围体碰撞,才进行精确碰撞检测和处理)。包围体类型包括球体、轴对齐包围盒(AABB)、有向包围盒(OBB)、8-DOP以及凸壳。包围盒广泛地应用于碰撞检测,比如射击、点击、相撞等,每一个物体都有自己的包围盒。因为包围盒一般为规则物体,因此用它来代替物体本身进行计算,会比直接用物体本身更加高效和简单。转载 2024-01-26 11:55:56 · 391 阅读 · 0 评论 -
OpenCASCADE 三角剖分
对PCurve围成的参数区域进行三角剖分,将三角剖分的结果映射到三维空间,最终生成每个Face的网格剖分。因为曲线曲面是三维的,而对曲面进行剖分的底层三角剖功能是个二维三角剖分库,所以网格剖分总的思路是对曲线在二维参数空间进行剖分,将参数空间剖分的结果通过曲面参数方程映射回到三维空间。原来的一些文章对网格剖分的算法及其用法进行过说明,本文主要对网格剖分的核心部分进行深入挖掘,理解其剖分精度控制原理。最多迭代次数是11次。转载 2023-06-15 11:00:04 · 870 阅读 · 1 评论 -
OpenCasCade批处理简介
OpenCasCade库目录下面包含各种文件,对于编译批处理文件以前也用过很多次,老是忘记里面的一些问题,在此记录一下。本次使用vs2017为例,其他版本请自行下载依赖第三方库 如下图主要是修改CSF_OPT_INC,CSF_OPT_LIB32, CSF_OPT_LIB64,CSF_OPT_BIN32,CSF_OPT_BIN64. 这些临时环境变量在vs启动后,在附加文件时,会以宏的方式出现 ,在此处将需要引用的第三方库的头文件,导入库lib,dll动态库的路径添加进去,这样就省去了打开vs原创 2023-02-28 15:12:44 · 222 阅读 · 0 评论 -
Opencascade关键词
1. chamfer 倒角 vsfillet 圆角:2.boolean operatiron(布尔操作): common(交集),fuse( ),cut(差集);3.depressions(凹陷), protrusions(突起), ribs and grooves(凹槽) or slots(槽) along planar(平面) or revolution surfaces(旋转平面)4.OpenCascade图像文件格式:VRML (Virtual Reality Modelin..转载 2021-09-11 13:02:05 · 477 阅读 · 0 评论 -
OpenCasCade中一个V3d_Viewer对应多个示例窗口V3d_View
在OCC一般使用中会根据本机系统环境创建不同的图形设备对象,在创建V3d_Viewer对象时必须给定相应的图形驱动程序与相关参数,一般一个V3d_Viewer对象会根据指定窗口(Windows下)创建一个视图(V3d_View),用来显示绘制出的图像信息,这种一对一的关系其实也可以转换成 一对多的情况,这就看实际使用中是否会对开发者有帮助。一个V3d_Viewer对应多个示例窗口V3d_Vie...原创 2019-12-17 14:10:37 · 2938 阅读 · 0 评论 -
OpenCasCade中一个V3d_Viewer对应多个AIS_InteractiveContext的使用
一.在OCC的使用中一般是这样的结构:1.OpenGl_GraphicDriver 根据系统不同执行相应的构造函数,创建图形设备对象,具体可查看文档说明。Handle(Aspect_DisplayConnection) aDisplayConnection;Handle(OpenGl_GraphicDriver) myGraphicDriver = new OpenGl_Graphic...原创 2019-12-12 14:49:48 · 3070 阅读 · 0 评论 -
OpenCasCade图元拖动问题
今天稍不注意解决了一个困扰很久的OCC图元拖动的问题,该问题的解决居然是因为一个坐标相对与绝对的问题。记录一下代码:如下简单实现了选中图元跟随鼠标移动而移动void OccEditView::SelectObejectMove(int x,int y){ if (myObeject) //当前选中图元 { m_TrsfPoint.SetCoord(0,0,0);...原创 2019-11-19 17:20:02 · 1736 阅读 · 4 评论 -
关于齐次坐标的理解
问题:两条平行线可以相交于一点在欧氏几何空间,同一平面的两条平行线不能相交,这是我们都熟悉的一种场景。然而,在透视空间里面,两条平行线可以相交,例如:火车轨道随着我们的视线越来越窄,最后两条平行线在无穷远处交于一点。欧氏空间(或者笛卡尔空间)描述2D/3D几何非常适合,但是这种方法却不适合处理透视空间的问题(实际上,欧氏几何是透视几何的一个子集合),2维笛卡尔坐标可以表示为(x,y)。如果...转载 2019-10-18 15:04:40 · 243 阅读 · 0 评论 -
何为仿射变换(Affine Transformation)
变换模型是指根据待匹配图像与背景图像之间几何畸变的情况,所选择的能最佳拟合两幅图像之间变化的几何变换模型。可采用的变换模型有如下几种:刚性变换、仿射变换、透视变换和非线形变换等,如下图:参考:http://wenku.baidu.com/view/826a796027d3240c8447ef20.html其中第三个的仿射变换就是我们这节要讨论的。仿射变换(Affine Tr...转载 2019-10-17 18:05:39 · 2645 阅读 · 0 评论 -
OpenCasCade拓扑变换(使用gp_trsf)
一.废话在OCC中如果要实现一个拓扑(TopoDS_Shape)的变换(平移,(点,轴,面)镜像,旋转,缩放,移位,形状),那么gp_trsf,gp_GTrsf是一个很好的媒介。深入理解其中的含义,可以组合起来使用,实现复杂的拓扑变换功能,要想熟练使用,必须在实践中体会在此使用到的几何知识可以参考:几何变换之仿射变换在OpenCaseCade6.8.0源代码中有介绍:gp_trsf...原创 2019-10-17 17:24:55 · 7712 阅读 · 2 评论 -
OpenCasCade开发小结
OpenCaseCade使用小结OCC简介 1.背景Open CASCADE是一套开放原始码的CAD/CAM/CAE几何模型核心,源自于法国的Matra Datavision公司,这一套函式库系统原来是著名的CADCAM软体EUCLID的开发平台,但是在1998年, Matra Datavision改变了经营策略,从以销售软体为主改变为提供CAD/CAM/CAE软体服务为主的获利模式,并...原创 2019-03-12 13:52:55 · 9922 阅读 · 5 评论 -
在Vs2013下编译FreeCAD0.17源码
如果只是使用FreeCAD可直接下载freecad安装版本FreeCAD-0.17.13522.3bb5ff4-WIN-x64-installer.exe,安装后可以使用。下载地址:https://www.freecadweb.org/wiki/Download;FreeCAD帮助文档FreeCAD_0_17.Quick.Reference.Guide.7z下载地址:https://github....转载 2019-03-19 17:51:58 · 1054 阅读 · 0 评论 -
OpenCasCade拓扑几何(拉伸,扫略,旋转)
OCC提供几种图形的构建是由基本图形的旋转,拉伸等方式形成的,源码例子有相关的介绍。下面介绍的一些实例提供思路与核心实现代码,显示与属性需要自己添加。关于OCC集合拓扑结构如下:现在经常接触的就是BRepPrimAPI_MakeSweep ,使用到的就是其三个派生类BRepPrimAPI_MakePrim(1)功能说明:swept(拉伸)(2)...原创 2019-03-06 18:47:22 · 10724 阅读 · 7 评论 -
OpenCasCade由一个基础形状拉伸形成其它形状的问题
使用OCC有一段时间了,一直没有记录这方面的内容,为了以后的学习,决定整理一下(技术有限,错误请指正)。OCC版本:6.8.0操作系统:windows(7)开发工具:vs2010,vs2017UI框架:MFC如题,今天的问题是关于OCC如何由一个基础的形状,通过拉伸,形成另一种图形,即三维视角。OCC源码里面提供了MFC有关的很多例子,这对我来说是一个很好的学习资源,...原创 2019-03-06 18:16:45 · 1971 阅读 · 0 评论 -
OpenCasCade – 载入IGES文件
本例是仿照官方示例ImportExport,如图:来实现的,说明下大概流程以及自己尝试的方法,遇到的问题,以及如何解决的。添加 ImportIGES 消息处理函数1. 添加事件菜单如图,在IDR_MAINFRAME的菜单栏中添加Import…->IGES二级菜单(以后写载入其他格式的文件都在此)。2. 在 IGES 上右键选择 添加事件处理...转载 2019-02-28 15:00:23 · 4256 阅读 · 18 评论 -
OpenCasCade – 贴纹理
前言因为项目需要,所以最近研究了下给 用OpenCasCade库创建的模型贴纹理的问题。因为网上没找到相关的文章,特此记录下来。官方示例本文中的代码是完全仿照官方示例(All-vc10 中的 Viewer3d)所写的,筒子们可以自己去研究一下这块代码,如图:然后看下官方示例的贴纹理效果:代码解读这里为简单起见,只解读图一中Bottle的代码...转载 2019-02-28 14:58:52 · 2420 阅读 · 0 评论 -
MFC OpenCasCade – 实现View中的实体对象与右边属性窗口的关联
我们现在来实现这样一种功能:点击视图中的实体对象,右边属性窗口显示相应的属性。问题的关键是如何获取我所选中的实体对象,下面是关键代码(放在响应鼠标点击的消息响应的函数中): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...转载 2019-02-28 14:57:21 · 1271 阅读 · 0 评论 -
MFC中使用OpenCasCade示例
目录:一、OpenCasCade开发环境搭建二、创建一个MFC应用程序三、在MFC工程中添加代码四、画个瓶子一、OpenCasCade开发环境搭建参见《OpenCasCade开发环境搭建》,这篇文章最后运行示例前所做的工作为以后开发OpenCasCade工程铺平了路,无需额外的配置,只需在新建的工程中加你的代码即可。二、创建一个MFC应用程序到此步,点...转载 2019-02-28 14:54:39 · 10640 阅读 · 5 评论 -
OpenCasCade 简介
Open CASCADE是一套开放原始码的CAD/CAM/CAE几何模型核心,源自于法国的Matra Datavision公司,这一套函式库系统原来是著名的CADCAM软体EUCLID的开发平台,但是在1998年, Matra Datavision改变了经营策略,从以销售软体为主改变为提供CAD/CAM/CAE软体服务为主的获利模式,并且在1999年公布Open CASCADE的程式原始码,任何人...原创 2019-03-08 10:43:57 · 36269 阅读 · 3 评论