sgCore库简介

简介: Introduction of sgCore eryar@163.com 摘要Abstract:本文结合sgCore的帮助文档简要介绍了一个sgCore库的功能。 关键字KeyWords:sgCore、Modeling Algorithm、Triangulation 一、简介 sgCore是由Geometros公司创建的实体造型库,是其公司的一个产品SolidGraph(参数化CAD系统)的几何内核。

Introduction of sgCore

eryar@163.com

摘要Abstract:本文结合sgCore的帮助文档简要介绍了一个sgCore库的功能。

关键字KeyWords:sgCore、Modeling Algorithm、Triangulation

一、简介

sgCore是由Geometros公司创建的实体造型库,是其公司的一个产品SolidGraph(参数化CAD系统)的几何内核。sgCore只用C++开发,导出了约30多个类及实现了二维和三维造型中的大部分算法。如:布尔运算、放样和其他曲面。 其免费库及示例程序可以从这里获得:http://www.geometros.com/。

二、几何

几何(Geometry)是sgCore库中的一个核心概念。用户使用库来造型时有两个基本点:一是几何对象的数学描述;一是其显示,对于三维对象而言是其多边形(polygonal),对于二维对象是其线段(segment)。

几何(Geometry)是独立的概念。它只是几何对象的数学的精确描述。

三、sgCore对象

对象(Object)和几何(Geometry)是库sgCore中的主要概念。与几何的精确描述几何体的概念不同,对象是用来显示的,它只是几何体的近似逼近。库sgCore中所有的操作都是基于对象(Object)的,而不是针对几何(Geometries)的。

库sgCore中的二维对象只是一些线段(a number of line segments);三维对象是一些三角面片(a number of triangles)。三维对象在计算机中最终都是被离散成三角面片后显示的。

与几何(Geometry)精确表示几何体不同,对象(Object)并不精确表示几何体,它是在几何上以一定精度近似表示几何体的。我们通常只能得到几何(Geometry)的一定精度的对象(Object)。这也是每个对象(Object)都保存一份(Geometry)的原因。

对象(Object)的类图如所示:

wps_clip_image-10288

3.1 二维基类sgC2DObject

其中二维的基类sgC2DObject很好理解。基本上都用其几何概念来表示,显示时通过GetPoints()得到二维对象上离散的点,用GL_LINE_STRIP来在OpenGL中显示即可。

3.2 三维基类sgC3DObject

三维基类sgC3DObject用来表示用三角面片数组来逼近几何对象(Object)的类。用于三角化及显示的函数主要有:

wps_clip_image-22425

其中AutoTriangulate()用来设置三维对象全局的三角化标志。当创建复杂三维对象时,建议将此标志关闭,可以提高算法速度。并使用函数sgC3DObject::Triangulate来对最终对象进行三角化。

sgCore库的三角离散主要用了两种算法:

wps_clip_image-29678

l SG_VERTEX_TRIANGULATION:这种三角化算法不创建新的顶点,这种三角化的算法有个缺点,可能导致stretched三角形;

l SG_DELAUNAY_TRIANGULATION:Delaunay三角化。

两种三角化效果的比较如下图所示:

wps_clip_image-6320

三维对象经过三角离散化后,就可以用GL_TRIANGLES在OpenGL中显示了。

如下图所示为使用 三角化后的Box:

 

//  Make a box 
sgCBox *  aBox  =  sgCreateBox( 1 ,  2 ,  2.1 ); 
aBox
-> Triangulate(SG_DELAUNAY_TRIANGULATION); 

 

三角化后的三角形可以通过函数GetTriangles()取得,用于显示。

wps_clip_image-4312

其中Box经过Delaunay三角化后,生成12个三角形,即一个Box由六个面,每个面2个三角形。

显示的实现可以参考sgCore的示例程序:demo_sources中的OpenGL文件夹下的Painter类。

3.3 边界表示法表示几何体sgCBRep

在库sgCore中所有的三维对象(3D solids)都是以多边形面的形式存储,即也是边界表示(BRep)存储的。这种表示方法使用几何实体的边界面(Boundary surface)来表示实体。

每个表面(Surface)由一系列的面(Faces)来逼近。每个面(Face)由其数学方式来描述(compact mathematical representation)。

面(Face)的边界由边(Edges)来表示。边(Edges)与面类似,也是用其数学方式来描述。

组成边(Edge)的曲线的端点就是顶点(Vertexes)。

这里有必要引入环(Cycle)的概念,用来描述面(Face)的轮廓(Contour)。因为每个面(Face)可以是由多个孔(any number of holes)的非凸包(non-convex)的多边形表示。

只有平面(Flat face)表示的模型称为多边形模型(Polygonal Model)。则多边形面包含了一系列的坐标顶点。

一个对象(Object)包含由一系列的表组成。

sgCore库也引入一个术语:BRep面片(BRep piece)。一个BRep面片就是与边界表面相连的一个面片。引入这个概念的目的是为了加快一些造型算法(如布尔运算算法)。每个BRepPiece有一个有限边界的立体平行四边形。It was designed to avoid passes of each BRep pieces face in the cycles. 所有的BRep面片连接起来组成一个完整的BRep。

下面以一个非凸的有一个孔的平面拉伸得到的BRep实体为例来说明相关概念。把这个BRep体分为四个面片:2个基面、一个侧面和孔面。如下图所示:

wps_clip_image-14857

下表将这个BRep体的顶点和边的信息进行说明。

wps_clip_image-31398

面(Face)由边的集合Edges组成。面的初始边的索引(Index)会设置,然后环(Cycle)的结构可以用来确定面的下一个边。这样面的外轮廓和孔都可以区分了。

如下图所示为一个Box的BRep表示的数据结构:

 

//  Make a box 
sgCBox *  aBox  =  sgCreateBox( 1 ,  2 ,  2.1 ); 

 

wps_clip_image-28847

四、造型算法

2D、3D的许多数学算法都在sgCore库中实现了。最基本和最重要的就是从已有的对象基础上创建出新的对象。在现代的计算机辅助设计系统(CAD)中创建新的对象的主要工具是布尔运算(Boolean operations)和基于二维对象创建体和面。sgCore库为开发者提供了大部分相关算法:布尔操作(Boolean operations)、放样(Kinematic operations)、基于二维对象创建三维对象(Creating 3D objects based on 2D objects.)。

4.1 布尔操作

布尔操作是由两个已经存在的对象创建出一个新的对象。布尔操作有以下几种:Intersection、Union、Sub、Section、IntersectionContour。

l Intersection:布尔交;

wps_clip_image-25000

l Union:布尔并;

wps_clip_image-25972

l Sub:布尔减;

wps_clip_image-9757

l IntersectionContour:计算交线;

wps_clip_image-20330

l Section:

wps_clip_image-25431

4.2 放样操作

放样操作(Kinematic Options)意思是将一个二维对象沿三维空间的路径拉伸得到的三维对象。拉伸的对象称为clip,路径称为profile。放样操作主要有以下几种:

l Rotation:旋转;

wps_clip_image-17150 wps_clip_image-12527

l Extrusion:拉伸;

wps_clip_image-25306

wps_clip_image-12942

l Spiral:螺旋;

wps_clip_image-18693

wps_clip_image-4892

l Pipe-like:管状;

wps_clip_image-29143

wps_clip_image-11861

4.3 构建表面

库sgCore实现一些从二维对象构建三维面的算法。实现的算法如下所示:

wps_clip_image-32700

构造带孔的平面:

wps_clip_image-1043

Coons曲面:

wps_clip_image-9690

wps_clip_image-10956

由控制点构造曲面Mesh:

wps_clip_image-14613

由截面Section创建:

wps_clip_image-25360

wps_clip_image-8711

wps_clip_image-15387

五、结论

sgCore是个小巧且造型功能还不错的库,且是免费的,能满足一般的造型需要。

更多详细说明请参考sgCore的文档。

目录
相关文章
|
传感器 物联网 芯片
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
814 0
|
缓存 编译器
软件体系结构 - 指令集架构
软件体系结构 - 指令集架构
854 0
|
10月前
|
机器学习/深度学习 资源调度 网络协议
TSAPINN:用于求解NS方程的新型PINN网络结构
本文提出一种基于可训练正弦激活函数的物理信息神经网络(TSA-PINN),用于高效求解纳维-斯托克斯方程。该方法通过神经元级可调频率的正弦激活机制,动态适应复杂流场特征,显著提升模型表达能力与收敛速度。结合动态斜坡恢复策略,有效缓解梯度问题,增强训练稳定性。在涵盖稳态、振荡及三维湍流等多种挑战性场景的数值实验中,TSA-PINN 在精度和效率上均优于传统PINN,尤其在近壁湍流和多尺度涡旋相互作用等难题中表现突出,为科学计算中的复杂流动模拟提供了新范式。
|
JavaScript 前端开发 Java
【GoWails】Go做桌面应用开发?本篇文章带你上手Wails框架!一步步带你玩明白前后端双端的数据绑定!
wails是一个可以让你使用Go和Web技术编写桌面应用的项目 可以将它看作Go的快并且轻量级的Electron替代品。可以使用Go的功能,并结合现代化UI完成桌面应用程序的开发
1988 5
|
编解码 弹性计算 前端开发
太详细了!终于有人把Netty原理架构讲解清楚了
本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。
2167 1
太详细了!终于有人把Netty原理架构讲解清楚了
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
3653 3
|
机器学习/深度学习 人工智能 算法
【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍
【机器学习】大模型训练的深入探讨——Fine-tuning技术阐述与Dify平台介绍
|
数据采集 传感器 边缘计算
不同类型的工业网关有何区别?
【8月更文挑战第8天】工业网关关键于工业自动化中的连接与数据转换,主要分为协议转换网关、数据采集网关及边缘计算网关。协议转换网关解决不同工业协议间的兼容性问题;数据采集网关负责收集并初步处理多类设备数据;边缘计算网关则在此基础上增加了现场数据处理能力,减轻云端负担。选型时需依据具体需求与系统结构。
714 2
|
机器学习/深度学习 自然语言处理 算法
Adam优化算法和应用场景
Adam(Adaptive Moment Estimation)是一种用于训练深度学习模型的优化算法
1607 2