コンピュータグラフィックスGeometryとTopology


## CADカーネルCSG/BREP
大体的に三つに分けることができます
- ワイヤーフレームモデル
- サーフェスモデル
- ソリッドモデル

ソリッドモデリングとは、三次元形状（実体）を数学的およびコンピュータモデリングするための一連の概念を指します。ソリッドモデリングは、一般的な幾何モデリングやコンピュータグラフィックスの関連分野（例：3Dモデリング）との主な違いは、物理的な忠実度を強調する点にあります。

ソリッドモデルは基本的に、構造表現CSG（Constructive Solid Geometry）と境界表現BREP（Boundary Representation）の二つの大きなカテゴリーに分けることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/cc4d8eac-c9c7-3019-4971-f9039ec18691.png)
Constructive Solid Geometry
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/65ec9351-de66-e9f4-5a0c-7edae155a294.png)
BREP（Boundary Representation）

現在主流のモデリングカーネルには主に以下のものがあります。

- シーメンス社が開発したParasolid
- ダッソー社のACIS
- オープンソースのOpenCascade

## ACIS (Advanced CSG and Implicit Surfaces)
- 開発会社: 最初はSpatial Technologyによって開発され、その後Dassault Systèmesに買収されました。
- 機能:
    - シンプルから複雑な実体のモデリングを提供
    - 実体のブール演算
    - 曲面のトリミングとトランジション編集機能
    - 実体データの保存
    - SATファイル形式のインポートとエクスポートをサポート
- 特徴:
    - オブジェクト指向のデータ構造
    - C++プログラミング言語を使用
    - 柔軟なワイヤーフレーム、サーフェス、ソリッドモデリングの組み合わせ

- ワイヤーフレームモデリング: エッジと頂点のみで物体を定義
- サーフェスモデリング: ワイヤーフレームモデリングに基づいて物体の可視面を定義
- ソリッドモデリング: 物体のサイズ、形状、密度、および属性（重量、容積、重心など）を表現
- ソフトウェアコンポーネント技術:
    - ACISのソフトウェアコンポーネントを自由に組み合わせて使用可能
    - 自身で開発したコンポーネントをACISのコンポーネントと置き換えることが可能
    - ACIS 3D Toolkitやさまざまな専門ソフトウェアパッケージを提供
- カスタマイズ性:インターフェースソースプログラムを提供し、ACISカーネルに基づくシステム開発をサポートSTEP標準に準拠したシステム開発を奨励

## Open CASCADE (OCC)

公式：https://dev.opencascade.org/doc/overview/html/
GitHub：https://github.com/Open-Cascade-SAS/OCCT


- タイプ: オープンソースの幾何造形エンジン
- 応用: FreeCAD、HeeksCAD、AnyCADなどの多くのCAD/CAE/CAMソフトウェアの開発基盤
- 特徴:
    - BREP構造に基づく
    - 2D/3Dソリッドモデリングおよびサーフェスモデリングを提供

- 構成:
    - モデリングコアコンポーネント
    - 可視化コンポーネント（OpenGLに基づく、機能はシンプルで表示効果は一般的）
    - データ管理（OCAF）（ツリー構造を使用、複雑で効率が低く、カスタム拡張が難しい）

## Parasolid
Parasolidは、世界をリードする、生産実績のある三次元幾何モデリングコンポーネントソフトウェアです。
Parasolidは、Siemens PLM Softwareによって開発された幾何モデリングカーネルであり、広くエンジニアリング設計ソフトウェアに使用されています。Parasolidのカーネルは、表現力豊かなAPI（アプリケーションプログラミングインターフェース）を提供し、ソフトウェア開発者がそのアプリケーションに複雑な幾何モデリング機能を実装できるようにします。

このソフトウェアが提供するコア機能を利用することで、Parasolid製品を基にしたユーザーは、業界で最も複雑な製品を迅速かつ安定してモデリングすることができます。高精度の境界表現技術（B-rep）に基づいているため、

Parasolidは統合フレームワーク内でのソリッドモデリング、ジェネリックユニットモデリング、および自由曲面モデリングをサポートします。

### API
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/62dfcf28-dc6e-59d0-4b0d-e477d215b3ed.png)

Parasolidにおける特定インターフェースの簡単な説明：
1. Kl インターフェース (レガシー)：Klインターフェースは、Parasolidの旧版APIインターフェースであり、通常は後方互換性のために保持されています。「レガシー」とは、このインターフェースが推奨されるものではなくなっている可能性があることを意味しますが、古いソフトウェアや廃止された機能をサポートするために依然としてメンテナンスされています。
1. PK インターフェース：PKインターフェースは、Parasolidの主要なC言語APIインターフェースであり、Parasolidの機能に全面的にアクセスできます。PKは「Parasolid Kernel」の略であり、このインターフェースを使用することで、開発者は複雑な幾何形状の作成や編集、ブール演算の実行など、内核の全機能を活用できます。
1. Frustrum インターフェース：Frustrumは通常、グラフィックスにおける視錐体を指し、視覚観察空間の一部を表します。Parasolidにおいて、Frustrumインターフェースは、特定の視点から表示される幾何データの処理と最適化に関連するインターフェースを指す可能性があります。


### Parasolid クラス構造
Parasolidの定義によれば、カーネルとユーザーのアプリケーション間でやり取りされるデータ項目は全て「オブジェクト（Object）」と総称されます。それぞれのオブジェクトは、定義された汎用オブジェクト型のクラスに属しています。Parasolidのクラスは階層構造を持ち、以下のようになっています：最上位のクラスはCLASSであり、他のすべてのタイプの親クラスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/ddaac53e-681a-6266-743a-a2688e9df8c6.png)

Parasolidモデルでは、タグ（tags）はエンティティを一意に識別するための内部参照です。これにより、アプリケーションやカーネルは特定の幾何学的およびトポロジカル要素を効率的に参照および操作できます。例えば、特定の幾何学的エンティティ（点、線、面など）をアルゴリズムで操作したり、ユーザーインターフェースで情報を表示したりする際に使用できます。タグはParasolid内核のエンティティ管理の重要な部分であり、データの一貫性と完全性を確保する上で欠かせない役割を果たしています。

1. PARTITION
1. PMARK
1. APPITEM
1. MARK
1. ENTITY
1. ATTDEF
1. GROUP
1. TRANSF
1. ATTRIB
1. GEO:Geometry
1. TOPOL:Topology

### GeometryとTopology
Parasolidでは、通常、使用目的に応じてデータを「几何（ジオメトリ）」と「拓扑（トポロジー）」の二つに分類します。具体的には、
几何（ジオメトリ）は、位置と形状を具体的に記述します。
拓扑（トポロジー）は、隣接関係を記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/5ba7081a-cb10-36ea-eb6f-b0b1d46d2484.png)

フェース
1. PLANE
1. TORUS
1. SPUN
1. SPHERE
1. CONE
1. OFFSET
1. CYL
1. BSURF
1. SWEPT
1. FSURF
1. BLENDSF

曲線
1. LINE
1. CIRCLE
1. ELLIPSE
1. BCURVE
1. ICURVE
1. SPCURVE
1. TRCURVE
1. FCURVE

### Topology

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/856e8826-ff65-115c-3672-9b531663502c.png)
Topologyのタイプ

1. INSTANCE
1. LOOP
1. FACE
1. FIN
1. SHELL
1. EDGE
1. REGION
1. PART
1. VERTEX

## Principle Geometry- Topology - Construction Geometry
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/17bf848c-3ad7-dafd-796b-0cbff75ec475.png)


## Topology概念
なぜTopology使用
「トポロジー」（Topology）の概念は数学に由来しており、特に空間の属性と構造を研究するものであり、これらの属性は展開、曲折、扭曲などの継続的な変化の下でも変化せずに維持されますが、撕裂は含まれません革新的な概念は、コンピュータ科学、ネットワーク処理、物理学などの数学以外の分野でも、その独特な用途と重要性を持っています。

先進的な概念が重要であるのは、これによって、物体またはシステムの連続性および関連性を、その厳密な形状に依存せずに、より容易に理解および説明できるようにするためである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2445123/faa1fd62-59f5-f99a-f632-335a8026e394.png)

上の図の例から、掘削はモデルの骨組みだけであると理解することができます。と円形の台（円錐台、円錐台の一部、典型的な円形台は 2 つの平行な円形の底面を持ち、底面どうしが接続されている側面は傾斜している）は、通常、それらのすべてが切り取られる可能性があるため、開拓等とみなされます。これは、連続した亀裂のない変形を許可する場合には、１つの円形を１つの円形の台に変えることができることを意味する。

[//]: # (参考https://blog.csdn.net/hmywillstronger/article/details/135959439)