>サイトトップへ >このカテゴリの一覧へ

日本工業規格

JIS

 B

3700-42

:1996

 (ISO

10303-42

:1994

)

産業オートメーションシステム

及びその統合

−製品データの表現及び交換−

第 42 部:統合総称リソース:

幾何及び位相の表現

Industrial automation systems and integration

−Product data representation and exchange−

Part 42 : Integrated generic resources :

Geometric and topological representation

序文  この規格は,1994 年に第 1 版として発行された ISO 10303-42 (Industrial automation systems and

integration

−Product data representation and exchange−Part 42 : Integrated generic resources : Geometric and

topological representation)

を翻訳し,技術的内容及び規格票の様式を変更することなく作成した日本工業規

格である。

なお,この規格で側線を施してある“参考”は,原国際規格にはない事項である。

0.  序文  この規格群は,計算機で解読可能な製品データの表現及び交換のための国際規格とする。この

規格群は,製品のライフサイクルを通して,製品データを記述できる中立的な仕組みを特定の処理系に依

存しない方法で提供することを目的とする。こうした記述は,その性質上,中立的なファイル交換だけで

なく,製品データベースを作成・共有したり製品データを保管したりする際の基本としても適している。

この規格群は,一連の規格からなり,それらは別々に発行される。この規格群のそれぞれの規格は,記

述法,統合リソース,アプリケーションプロトコル,抽象試験スイート,実装法及び適合性試験に分けら

れる。これらの概要は,JIS B 3700-1 に示されている。この規格は,統合リソースクラスの一つとする。

この規格の主な内容は,次のとおりとする。

−  幾何 (Geometry)

−  位相 (Topology)

−  形状モデル (Geometric models)

規格群の中で,この規格は,幾何及び位相表現に用いる統合リソースについて規定する。その主な応用

としては,製品モデルの形状又は幾何形式を明示的に表現することである。この形状表現は,物理ファイ

ルに展開されたときに,安定かつ効果的に情報伝達を行うために規定された。

幾何(4.)は,主にパラメタ曲線及びパラメタ曲面の幾何について規定する。ここには,それらの定義に必


2

B 3700-42:1996 (ISO 10303-42:1994)

要な曲線及び曲面のエンティティ,他のエンティティ,関数,並びにデータ型が含まれる。共通の枠組か

2

次元と 3 次元との両方の幾何の定義に使われる。すべての幾何は,それらが表現する要素のコンテキス

トの一部として定められた一つの座標系の中で定義される。これらの概念は,すべて JIS B 3700-43 に定義

される。

位相(5.)は,オブジェクトの幾何形状に関してではなく,オブジェクト間の接続関係について規定する。

ここには,基本的な位相エンティティとそれらが特殊化された下位型とか含まれる。ある場合には,その

下位型は,幾何的な関連付けをもつ。更に,位相エンティティの定義に必要な関数(特に制約関数)及び

データ型も含まれる。

形状モデル(6.)は,3 次元立体オブジェクトの形状を記述するデータを交換するための基本的なリソース

を規定する。形状モデルは,

(多くの場合)幾何と位相との両方のデータを含む,形状の完全な表現方法を

規定する。ここには,二つの古典的な形式の立体モデルである CSG (Constructive Solid Geometry)  と境界表

現 (B-rep) とが含まれる。更に,製品の幾何を記述するのにやや完全さに欠け,より整合性に関する制約

の少ない別のエンティティも,ここに含まれる。

1.  適用範囲  この規格は,製品形状の幾何及び位相の明示的な表現のためのリソース構造を規定する。

この規格の範囲は,理想的な製品モデルを明示的に表現する際に必要なものとする。公差及び形状特徴に

よる暗黙的な表現形式は,この規格では定めない。幾何(4.参照)及び位相(5.参照)は,独立に利用でき,

この規格でも形状モデル(6.参照)の種々の形式で広く使われる。更に,この規格では,表現要素が形状

に関する場合の表現概念を規定する。

1.1

幾何 (Geometry)  次のものは,幾何スキーマの範囲とする。

−  点,ベクトル,パラメタ曲線及びパラメタ曲面の定義。

−  変換に関する演算の定義。

−  直接座標値で,又は存在する曲線若しくは曲面のパラメタで定義された点。

−  円錐曲線及び初等曲面の定義。

−  パラメタ曲面上の曲線の定義。

−  一般的なパラメタスプライン曲線及びパラメタスプライン曲面の定義。

−  点,曲線及び曲面の複製の定義。

−  オフセット曲線及びオフセット曲面の定義。

−  交差曲線の定義。

次のものは,この規格の範囲外とする。

−  手続き的に定義した曲線及び曲面の他のすべての形式。

−  パラメタ的な表現形式をもたない曲線及び曲面。

−  線織面の明示的な表現のすべての形式。

備考  線織面について,幾何は,境界曲線のパラメタ化及び二つの曲線上の点の組とを関連付け

る方法に大きく依存する。しかし,B-スプラインの境界曲線をもつ線織面は,B-スプライ

ン曲面エンティティで正確に表現できる。

1.2

位相 (Topology)  次のものは,位相スキーマの範囲とする。

−  基本的な位相エンティティである頂点,稜線及び面の定義。これらのエンティティは,特別な下

位型によって,それぞれ点,曲線及び曲面の幾何と関連付け可能とする。

−  位相構造である稜線列 (path),ループ及びシェルを形成する基本的な位相エンティティを集めた


3

B 3700-42:1996 (ISO 10303-42:1994)

もの,並びにこれらの構造の整合性を保証する制約。

−  位相エンティティの向き。

1.3

形状モデル  (Geometric Shape Model)  次のものは,形状モデルスキーマの範囲とする。

−  3 次元立体の正確な幾何形式を記述するデータ。

−  CSG (constructive solid geometry)  モデル。

− CSG 基本立体及び半空間の定義。

−  掃引操作による立体モデルの生成。

−  多様体境界表現 (B-rep) モデル。

−  境界表現モデルの整合性を保証する制約。

−  曲面モデル。

−  ワイヤフレームモデル。

−  幾何データ集合。

−  別な配置での立体モデルの複製の生成。

次のものは,この規格の範囲外とする。

−  非多様体境界表現モデル。

−  空間占有法による立体モデル(例えば,8 進木モデル。

−  組立て品及び機構。

2.  引用規格  この規格は,次の規格を引用する。

(1)  ISO/IEC 8824-1 : 

1)

  Information technology − Open Systems Interconnection − Abstract Syntax

Notation One (A S N.1)

−Part  1 : Specification of basic notation

1)

近く,発行予定。

(2)  ISO 10303-1 : 1994  Industrial automation systems and integration−Product data representation and

exchange

−Part 1 : Overview and fundamental principles

備考  JIS B 3700-1(産業オートメーションシステム及びその統合製品−データの表現及び交換−

第 1 部:概要及び基本原理) : 1996 が,この国際規格と一致している。

(3)  ISO 10303-11 : 1994  Industrial automation systems and integration−Product data representation and

exchange

−Part 11 : Description methods : The EXPRESS language reference manual

備考  JIS B 3700-11(産業オートメーションシステム及びその統合−製品データの表現及び交換−

第 11 部:記述法:EXPRESS 言語) : 1996 が,この国際規格と一致している。

(4)  ISO 10303-41 : 1994  Industrial automation systems and integration−Product data representation and

exchange

−Part 41 : Integrated generic resources : Fundamentals of product description and support

備考  JIS B 3700-41(産業オートメーションシステム及びその統合−製品データの表現及び交換−

第 41 部:統合総称リソース:製品記述の基本要素) : 1996 が,この国際規格と一致し

ている。

(5)  ISO 10303-43 : 1994  Industrial automation systems and integration−Product data representation and

exchange

−Part 43 : Integrated generic resources : Representation structures

備考  JIS B 3700-43(産業オートメーションシステム及びその統合−製品データの表現及び交換−

第 43 部:統合総称リソース:表現構造) : 1996 が,この国際規格と一致している。


4

B 3700-42:1996 (ISO 10303-42:1994)

3.  定義,記号及び略号 
3.1

定義  この規格では,次の用語を定義する。

3.1.1

弧状連結 (arcwise connected)  あるエンティティの定義域の中にある任意の 2 点が,定義域内に完

全に収まる曲線で連結されること。

3.1.2

軸対称 (axi-symmetric)  あるエンティティが対称軸をもち,その軸まわりの回転について不変で

あること。

3.1.3

位相境界,境界 (bound)  ある位相エンティティの限界を示す,より低い次元数の位相エンティテ

ィ。面の境界はループとし,稜線の境界は頂点とする。

3.1.4

幾何境界,境界 (boundary)  R

m

空間に含まれる定義域 の境界とは,

次の性質をもつ点 の集合。

x

を含む R

m

の開球 のうち,と との積 Uが 次元(dm)の閉半空間

d

R

+ 

における開集合に位相

同型であるものが存在する。このとき

x

は,

d

R

+ 

の原点に対応する。

備考1.

d

R

+ 

は,

x

1

≧0である

R

d

のすべての数学的な点(

x

1

x

2

,…,

x

d

)の集合であると定義す

る。

2.  このため,用語“開”は,通常の数学的な意味をもつ。この規格の他の箇所で定義され

ている“開曲面”とは関係ない。

3.1.5

境界表現立体モデル  (boundary representation solid model, B-rep)  形状モデルの一種であって,立

体の寸法及び形状が,その境界を構成する面,稜線及び頂点によって定義されるもの。

3.1.6

閉曲線 (closed curve)  両方の端点が同一である曲線。

3.1.7

閉曲面 (closed surface)  連結 2-多様体であり,3 次元空間をちょうど二つの連結構成要素に分割す

るもの。分割された空間の一方は,有限とする。

3.1.8  位相エンティティの完備集合  (completion of a topological entity)  対象とする位相エンティティと,

その境界の定義において直接的又は間接的に参照されるすべての面,稜線及び頂点とからなる集合。

3.1.9

連結 (connected)  弧状連結(3.1)に同じ。

3.1.10  連結構成要素 (connected component)  定義域の極大連結部分集合。 
3.1.11  CSG (constructive solid geometry)  形状モデル表現の一種。立体モデルに対する一連の正規化ブー

ル操作の結果として,立体が定義される。

3.1.12  座標空間 (coordinate space)

n

次元空間の各点に,

n

個のパラメタからなる集合を一意に関連付け

る参照系。

3.1.13  曲線 (curve)  実数直線(

R

1

)の連結部分集合上で定義される連続関数の 2 次元又は 3 次元空間に

おける像であって,単独の点ではない数学的な点の集合。

3.1.14  サイクル (cycle)  グラフにおける頂点と稜線とが交互に現れる連鎖であって,最初及び最後の頂

点が同じもの。

3.1.15  境界付き d-多様体  (d-manifold with boundary)

d

次元内部と境界との和からなる定義域。

3.1.16  次元数 (dimensionality)  幾何エンティティのパラメタ空間における独立した座標の数。定義域を

もつ必要のない位相エンティティの次元数は,エンティティ定義で指定される。リスト又は集合の次元数

は,リスト又は集合の要素の次元数の最大値とする。

3.1.17  定義域 (domain)  エンティティに対応するモデル空間内の数学的な点の集合。


5

B 3700-42:1996 (ISO 10303-42:1994)

3.1.18  オイラー式 (euler equation)  モデルの位相の整合性を検証するために使用する方程式。エンティ

ティの位相的な性質を関係付ける種々の等式は,オイラー (euler) の標数として知られる数の不変性から

導かれる。これらの等式は,位相構造の整合性を高速に検査するときに,よく用いられる。オイラー式の

条件を満足しない場合は,

“あり得ない”モデルであると認識できる。この規格では,次の特別な二つの場

合を重要視する。グラフに対するオイラー式は 5.2.3,曲面に対するオイラー式の条件は 5.4.23 及び 5.4.25

による。

3.1.19  大きさ (extent)  エンティティの定義域の内容の測度。この側度は,エンティティの次元数に応じ

た単位で測られる。すなわち,次元数が 1,2 及び 3 に対して,それぞれ長さ,面積及び体積が用いられる。

必要な場合,記号

Ξで大きさを示す。

3.1.20  有限 (finite)  エンティティについて有限な上界が存在して,その定義域にある任意の二つの点の

距離が,その上界以下であること。

3.1.21  グラフの種数  (genus of a graph)  グラフ通過アルゴリズム(5.2.3 備考参照)によって手続き的に

定義される整数値の不変量。

3.1.22  曲面の種数  (genus of a surface)  対象とする曲面に位相同型な曲面を生成するために,球面に加え

なければならないハンドルの個数。

3.1.23  幾何的に基礎付けられた (geometrically founded)  geometric_representation_item の特性であって,

座標空間との関係が示されていること。この座標空間において,geometric_representation_item の位置及び

向きを表す点及び方向の座標値が定義される。

3.1.24  幾 何 的 に 関 係 付 け ら れ た  (geometrically related)   同 一 の context に 結 合 さ れ た 二 つ の

geometric_representation_item

の関係であって,これによって両者間の距離及び方向の概念が定義される。

3.1.25  幾何座標系  (geometric coordinate system)  すべての幾何が参照する大域的な直交デカルト座標系。 
3.1.26  グラフ (graph)  頂点及び稜線の集合。この規格で対象とするグラフは,自己ループと,同一の 2

頂点を接続する多重稜線とを許すので,技術文献では,通常,疑似グラフと呼ばれる。

3.1.27  ハンドル (handle)  輪環体を球面から区別する構造。これは,曲面における二つの穴を結ぶ円柱状

の管とみなすことができる。

3.1.28  位相同型 (homeomorphic)  定義域

X

から

Y

へ一対一対応する連続関数

f

-

が存在し,逆関数

f

-

1

連続であること。

3.1.29  内側 (inside)  定義域

X

が定義域

Y

の内側にあるとは,定義域

X

Y

が同一のユークリッド空間

R

m

に含まれ,

Y

R

m

をちょうど二つの連結構成要素に分け,その一つが有限であり,

X

が有限の構成要素

に含まれること。

3.1.30  内部  (interior)

R

m

に含まれる

d

次元定義域

X

d

次元内部とは,

X

において次の性質をもつ点

x

の集合。

x

を含む

R

m

の開球

U

のうち,

U

X

との積

U

X

R

d

の開球と位相同型になるものが存在する。

3.1.31  リスト (list)  順序付けされた同じ型の集まり。要素は,重複してもよい。リストは,  [

A

]

のよう

に角括弧でくくって表現する。

3.1.32  モデル空間 (model space)  実在の物体の幾何が定義される,次元数が 2 又は 3 の空間。 
3.1.33  開曲線 (open curve)  二つの異なる端点をもつ曲線。 
3.1.34  開曲面 (open surface)  境界をもつ多様体であって,閉じていない曲面。すなわち,有限でないか,

又は空間をちょうど二つの連結構成要素に分割しないかのいずれかとする。

3.1.35  向き付け可能 (orientable)  曲面の法線ベクトルの向きが,連続的に変化し整合性をもつこと。

備考  これは,法線ベクトルの値が連続的に変化することを要求しない。曲面には,接平面の不


6

B 3700-42:1996 (ISO 10303-42:1994)

連続性があってもよい。

3.1.36  干渉 (overlap)  二つのエンティティがシェル,面,稜線又は頂点を共有すること。 
3.1.37  パラメタ範囲 (parameter range)  曲線又は曲面の有効なパラメタ値の範囲。 
3.1.38  パラメタ空間 (parameter space)  一意に定義されたパラメタ化によって,曲線に関連付けられた 1

次元空間,又は曲面に関連付けされた 2 次元空間。

3.1.39  配置座標系  (placement coordinate system)  空間中の幾何エンティティの配置を示すための直交デ

カルト座標系。属性の解釈の記述と,曲線エンティティ及び曲面エンティティの一意なパラメタ化の定義

とに用いる。

3.1.40  自己干渉 (self-intersect)  曲線又は曲面の場合,パラメタ範囲内にある少なくとも二つの点の像で

ある数学的な点がその定義域に存在し,かつこれら二つの点の一つがパラメタ範囲の内部にあること。頂

点,稜線又は面の場合,その定義域において自己干渉すること。

備考  曲線又は曲面は,それが閉じているだけでは自己干渉しているとは見なさない。

3.1.41  自己ループ (self-loop)  両端が同一の頂点である稜線。 
3.1.42  集合 (set)  重複する要素がなく,かつ順序付けのない集まり。 
3.1.43  空間次元数 (space dimensionality)  座標空間の点の配置を定義するために必要なパラメタの数。 
3.1.44  曲面 (surface)  平面(

R

2

)の連結部分集合上で定義される連続関数の像である数学的な点の集合。

3.1.45  位相上の向き (topological sense)  属性の順序から導かれる位相エンティティの向き。

1.  稜線の位相上の向きは,稜線の開始頂点から終了頂点への方向とする。

2.  稜線列の位相上の向きは,リストの順に並べた稜線の順番に従う。

3.2

記号 (Symbol)  この規格では,次の記号を使用する。

3.2.1

幾何に関する数学記号  幾何スキーマで使用する数学記号の用法は,表 のとおりとする。

表 1  幾何に関する数学記号

記号

定義

α

スカラ量

A

ベクトル量

<>

ベクトルの正規化

a

正規化されたベクトル(例えは,a=<A>=A/|A|)

×

外積

内積

AB

から への変換

λ(u)

パラメタ曲線

C(xyz)

解析曲線

σ(uv)

パラメタ曲面

S(xyz)

解析曲面

C

x

x

に関する の偏微分

σ

u

u

に関する

σ(u,v)の偏微分

S

x

x

に関する の偏微分

||

絶対値,大きさ又は行列式

R

m

m

次元実空間

3.2.2

位相に関する記号  位相エンティティが満たさなければならない制約を厳密に定義する試みがな

されてきた。多くの場合,これらは,記号的に定義されている。ここでは,この目的のために使用する表

記法について定義する。ここでの定義は,EXPRESS の定義又は用法とは無関係とする。

位相的な構成要素は,vertex, edge, path, loop, face(及び subface)並びに shell とする。これらは,それぞ


7

B 3700-42:1996 (ISO 10303-42:1994)

れ記号

V

,

E

,

P

,

L

,

F

及び

S

によって参照される。

これらのエンティティの幾つかは,特別な形式をとるが,形式の区別をするために,必要に応じて上付

き添字を用いる。

3. loop は,vertex_loop,edge_loop 又は poly_loop のいずれかである。これらは

L

v

L

e

又は

L

p

と表す。

表 に位相スキーマで使用する記号の一覧を示す。

表 2  位相に関する記号

記号

定義

V

ν

 

vertex

一意な vertex の数

E

ε

 

E

l

ε

l

 

G

e

 

方向のない edge

一意な方向のない edge の数

oriented_edge

一意な oriented_edge の数

edge

の種数

P

G

p

path

一意な path の数

path

の種数

L

L

l

L

l

L

e

L

p

L

v

G

l

loop

一意な loop の数

face_bound

一意な face_bound の数

edge_loop

poly_loop

vertex_loop

loop

の種数

F

F

H

f

face

一意な face の数

face

の種数

S

c

 

S

o

 

S

v

 

S

w

 

H

s

shell

一意な shell の数

closed_shell

open_shell

vertex_shell

wire_shell

shell

の種数

Ξ

大きさ

{A}

[A]

型 のエンティティの集合

型 のエンティティのリスト

方向のない edge は,下位型の oriented_edge ではないエンティティ edge とする。エンティティ定義の幾

つかにおいては,位相の属性は(位相+論理)の対の形式をとることがあり,その場合,一般に下位型の

oriented_xxx

のような名前のエンティティで表現される。位相の場合と(位相+論理)の対の場合とを区別

するために,例えば,

E

E

l

S

o

o

l

S

などのように下付き添字を用いる。

幾つかの位相エンティティは,参照されるエンティティの方向が参照するエンティティの方向と同じか

反対かを示すために,向きフラグを用いる。フラグが TRUE の場合,参照されるエンティティの方向は同

じとし,FALSE の場合は,参照されるエンティティの方向は(概念的には)反対とする。上位で参照する


8

B 3700-42:1996 (ISO 10303-42:1994)

エンティティから下位で参照されるエンティティへと連鎖する場合,複数の向きフラグか存在しうる。上

位で参照するエンティティの方向に対して下位で参照されるエンティティの方向は,向きフラグの連鎖の

一致論理(

not exclusive or

,

)を評価することで得られる。例えば,face は(loop+Loop 向きフラグ)を

参照し,loop は(edge+Edge 向きフラグ)を参照し,edge は(curve+Curve 向きフラグ)を参照する。face

の“FaceCurve 向きフラグ”は,次の式で与えられる。

FaceCurve

向きフラグ=Loop 向きフラグ⃝

Edge

向きフラグ⃝

Curve

向きフラグ

ここで,一致論理は,二つのフラグが同じ値をもつとき TRUE とする。更に,次の真理値表によって定義

される。

T

T=T

T

F=F=F

T

F

F=T

したがって,次のとおりとなる。

F

T

F=T

3.3

略語  この規格では,次の略語を用いる。

B-rep boundary representation solid model

CSG constructive solid geometry

4.  幾何 (Geometry)  次の EXPRESS 宣言は,geometry_schema を開始し,必要な外部参照を明らかにす

る。

EXPRESS による定義

*)

SCHEMA geometry_schema;

 REFERENCE FROM representation_schema

       (representation,

        functionally_defined_transformation,

        representation_item,

        representation_context,

        definitional_representation,

        item_in_context,

        using_representations);

 REFERENCE FROM measure_schema

       (length_measure,

        positive_length_measure,

        plane_angle_measure,

        plane_angle_unit,

        positive_plane_angle_measure,

        parameter_value,

        global_unit_assigned_context);

 REFERENCE FROM topology_schema

       (edge_curve,


9

B 3700-42:1996 (ISO 10303-42:1994)

        face_surface,

        poly_loop,

        vertex_point);

 REFERENCE FROM geometric_model_schema

       (solid_model,

        boolean_result,

        sphere,

        right_circular_cone,

        right_circular_cylinder,

        torus,

        block,

        right_angular_wedge,

        half_space_solid,

        shell_based_surface_model,

        face_based_surface_model,

        shell_based_wireframe_model,

        edge_based_wireframe_model,

        geometric_set);

(*

備考1.  上で参照しているスキーマは,次の規格による。

representation_schema

JIS B 3700-43

measure_schema

JIS B 3700-41

topology_schema

この規格の 5.

geometric_model_schema

この規格の 6.

2. topology_schema 及び geometric_model schema への参照は,上位型 geometric_representation_item

の定義のためだけに必要とする。

3.  このスキーマの図式表現を附属書 の図 D.1D.12 に示す。

4.1

概要  geometry_schema の主題は,パラメタ曲線及びパラメタ曲面の幾何とする。

representation_schema

JIS B 3700-43 参照)及びこの規格で定義する geometric_representation_context は,

幾何を定義するコンテキストを提供する。それによって,幾何的に関係付けられる要素と独立した座標空

間に存在する要素とを区別することが可能となる。特に,各 geometric_representation_item は,その座標空

間のユークリッド次元を属性として含む geometric_representation_context をもつ。ここでは,その空間の座

標系を幾何座標系と呼ぶ。length_measure 及び plane_angle_measure の単位は,このコンテキストの中で大

域的に決められているとする。規則 (compatible_dimension) によって,同じ geometric_representation_context

の中では,すべての geometric_representation_item が同一の空間次元数をもつことか保証される。空間次元

数 dim は,geometric_representation_item のすべての下位型に継承される誘導属性とする。

4.2

基本概念及び前提条件


10

B 3700-42:1996 (ISO 10303-42:1994)

4.2.1

空間次元数  すべての幾何は,各軸の単位が同一の右手系の直交デカルト座標系において定義され

る。2 次元及び 3 次元のいずれの幾何の定義にも共通な枠組を用いる。point 及び direction のいずれにも,

2

次元及び 3 次元の形式が存在し,これらの形式は,単に 3 番目の座標値があるかないかによって区別さ

れる。複雑な幾何エンティティは,すべて point 及び direction を用いて定義され,それらから空間次元数

が導出される。

4.2.2

幾何的関係  一つの geometric_representation_context をもつ representation に items として含まれてい

る す べ て の geometric_representation_item は , 幾 何 的 に 関 係 付 け ら れ て い る 。 こ の と き

geometric_representation_item

は,その representation のコンテキストにおいて幾何的に基礎付けられている

と言う。異なる representation に items として現れる geometric_representation_item に対しては,幾何的関係

(例えば点と点との間の距離)は,存在しない。

4.2.3

解析曲線及び解析曲面のパラメタ化  ここで定める曲線及び曲面には,それぞれパラメタ化が定義

されている。幾つかの曲線や曲面は,本来,パラメタを用いて定義される。一方,円錐曲線及び初等曲面

は,幾何的に定義される。

後者の場合,パラメタ化の定義に配置座標系を用いる。幾何的な定義は,パラメタ化に必要なデータを

一部含んでいるが,すべてではない。配置座標系を定義するデータは,個々の曲線エンティティ又は曲面

エンティティと結合した axis2_placement に含まれる。

4.2.4

曲線  4.4 で定義する曲線エンティティは,直線,初等円錐曲線,一般的なパラメタ多項式曲線及

び参照によって又は手続き的に定義された曲線とする。すべての曲線は,曲線をトリム (trim) したり,パ

ラメタ値によって曲線上の点が区別されるように,パラメタ化される。円錐曲線に対しては,空間中の向

き及び位置から幾何形式を分離した表現方法を用いている。いずれの場合でも,向き及び位置の情報は,

エンティティ axis2_placement によって表す。はん(汎)用のパラメタ曲線は,エンティティ b_spline_curve

を用いて表現する。これは,すべての型の多項式及び有理パラメタ式の曲線のデータ交換に対する最も安

定した表現形式として選ばれた。適当な属性値及び下位型を用いれば,エンティティ b_spline_curve は,

多項式,有理式,ベジエ形式又は B-スプライン形式のスプライン曲線を表現できる。composite_curve エン

ティティは,

曲線をつなぐ点における連続性の情報を交換する仕組みをもち,より複雑な曲線を構成する。

offset_curve

及び curve_on_surface は,他の幾何によって定義される曲線とする。offset_curve には,2 次

元及び 3 次元のアプリケーションに対して,別々のエンティティが存在する。curve_on_surface は,二つの

曲面の交差を表す intersection_curve を含む。そのような曲線は,3 次元空間中で表現しても,いずれかの

曲面の 2 次元パラメタ空間で表現してもよい。

4.2.5

曲面  曲面エンティティは,単純な境界表現 (B-rep) 立体モデリングシステムの要件を満たし,一

般的な多項式及び有理式パラメタ曲面のデータ交換を可能にする。単純な曲面とは,平面,球面,円柱面,

円錐面,輪環面,surface_of_revolution 及び surface_of_linear_extrusion を指す。曲線の場合と同様,すべて

の曲面には,標準的なパラメタ化が存在する。多くの場合,曲面の定義には境界を含まない。すなわち,

曲面は,明示的に又は暗黙に境界があることを前提とする。明示的な境界は,rectangular_trimmed_surface

又はエンティティ curve_bounded_surface によって実現できる。暗黙的な境界は,face を定義するための,

付加的な位相情報を結合することが必要となる。

エンティティ b_spline_surface 及びその下位型は,すべての型の多項式及び有理式の双パラメタ曲面のデ

ータ交換に対する,最も一般的な方法を与える。このエンティティは,曲面幾何を表現するのに最も安定

な形式として,制御点を用いる。エンティティ offset_surface は,与えられた曲面に対し,単純に法線方向

へ の オ フ セ ッ ト を 取 っ て 得 ら れ る 曲 面 の デ ー タ 交 換 を 目 的 と す る 。 エ ン テ ィ テ ィ


11

B 3700-42:1996 (ISO 10303-42:1994)

rectangular_composite_surface

は,異なる surface_patch を接続した長方形状のメッシュを表現でき,その際,

surface_patch

間の連続性の次数を定義できる。

4.2.6

優先形式  幾つかの幾何エンティティでは,幾何的な対象を複数の方法で定義できる。このような

多重性には,

“優先形式 (preferred form)”又は“主表現 (master representation)”を付ける。これは,パラメ

タ化を決定するために使われる形式とする。

備考  多 重 形 式 が 実 際 に 同 一 で あ る こ と を 保 証 す る の は 実 用 的 で は な い の で , 属 性

master_representation

によって優先形式を指定できる。これは,恐らくデータの作成者によ

って決定されることになる。多重表現をもつエンティティに対して,パラメタ化,定義域

及び計算結果のような性質は,すべて主表現から導出される。他の表現を用いるのは,実

用性を考慮したための妥協である。

4.3

geometry_schema の型定義

4.3.1

dimension_count  dimension_count は,geometric_representation_context の座標空間次元数を定義す

るための正の整数とする。

EXPRESS による定義

*)

TYPE dimension_count = INTEGER;

WHERE

  WR1: SELF > O;

END_TYPE;

(*

形式的要件

WR1:dimension_count は,正でなければならない。

4.3.2

transition_code  この型は,複合曲線又は複合曲面の連続性を表す。ここでの連続性とは,幾何の

性質であり,パラメタに関する性質ではない。

EXPRESS による定義

*)

TYPE transition_code = ENUMERATION OF

   (discontinuous,

    continuous,

    cont_same_gradient,

    cont_same_gradient_same_curvature);

END_TYPE;

(*

列挙項目の定義

discontinuous

:セグメント又はパッチが接続していない。曲線又は曲面が閉じていないことを示すために,

その境界においてだけ用いる。

continuous

:セグメント又はパッチが接続しているが,接ベクトル又は法線ベクトルに関する条件は存在し

ない。

cont_same_gradient

:セグメント又はパッチが接続していて,接ベクトル又は法線ベクトルが平行,かつ同

じ方向をもつ。導関数が一致する必要はない。


12

B 3700-42:1996 (ISO 10303-42:1994)

cont_same_gradient_same_curvature

:曲線の場合,セグメントが接続していて,接ベクトルが平行,かつ同

じ方向をもち,更に曲率が等しい。導関数が一致する必要はない。曲面の場合,パッチの共通の境界に沿

って主曲率が等しく,主方向が一致している。

4.3.3

preferred_surface_curve_representation  この型は,surface_curve に対する表現の優先形式を示す

ために用いられる。ここで,優先形式は,幾何空間における曲線又は基礎となる曲面上のパラメタ空間に

おける曲線のいずれかとする。

EXPRESS による定義

*)

TYPE preferred_surface_curve_representation = ENUMERATION OF

   (curve_3d,

    pcurve_s1,

    pcurve_s2);

END_TYPE;

(*

列挙項目の定義

curve_3d

:3 次元空間の曲線が優先される。

pcurve_s1

:1 番目の pcurve か優先される。

pcurve_s2

:2 番目の pcurve が優先される。

4.3.4

b_spline_curve_form  この型は,B-スプライン曲線 (b_spline_curve) で表される特定の形状を示す

ために使う。

EXPRESS による定義

*)

TYPE b_spline_curve_form = ENUMERATION OF

   (polyline_form,

    circular_arc,

    elliptic_arc,

    parabolic_arc,

    hyperbolic_arc,

    unspecified);

END_TYPE;

(*

列挙項目の定義

polyline_form

:次数 1 の B-スプライン基底関数によって表される直線セグメントのつながった並び。

circular_arc

:b_spline_curve で表される円弧又は円全体とする。

elliptic_arc

:b_spline_curve で表されるだ円弧又はだ円全体とする。

parabolic_arc

:b_spline_curve で表される放物線の有限の長さの弧とする。

hyperbolic_arc

:b_spline_curve で表される双曲線の一つの分岐の有限の長さの弧とする。

unspecified

:特に形状を指定しない b_spline_curve とする。

4.3.5

b_spline_surface_form  この型は,B-スプライン曲面 (b_spline_surface) によって特定の形式の曲

面の一部を表現することを示すのに使われる。


13

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS による定義

*)

TYPE b_spline_surface_form = ENUMERATION OF

   (plane_surf,

    cylindrical_surf,

    conical_surf,

    spherical_surf,

    toroidal_surf,

    surf_of_revolution,

    ruled_surf,

    generalised_cone,

    quadric_surf,

    surf_of_linear_extrusion,

    unspecified);

END_TYPE;

(*

列挙項目の定義

plane_surf

:各パラメタに関して,次数 1 の B-スプライン曲面で表される平面の境界付けられた部分。

cylindrical_surf

:円柱面の境界付けられた部分。

conical_surf

:直円錐面の曲面の境界付けられた部分。

spherical_surf

:b_spline_surface で表される球面の境界付けられた部分又は球面全体。

toroidal_surf

:b_spline_surface で表される輪環体又は輪環体の部分。

surf_of_revolution

:回転面の境界付けられた部分。

ruled_surface

:二つのパラメタ曲線上の,同じパラメタ値に対応する点を直線で結んで作られる曲面。

generalised_cone

:第二の曲線が一点に縮退した線織面の特別な場合。b_spline_surface で表すとき,一つの

稜線に沿ったすべての制御点は一致する。

quadric_surf

:変数 x,y 及び z に関して次数 2 の曲面のクラスに属する境界付けられた部分とする。

surf_of_linear_extrusion

: パ ラ メ タ の う ち の 一 つ に 関 し て 次 数 1 の b_spline_surface で 表 さ れ る

surface_of_linear_extrusion

の境界付けられた部分。

unspecified

:特に形を指定しない曲面とする。

4.3.6

knot_type  この型は,B-スプラインのノット (knot) が暗黙に定められるような,特に簡単な形式

をとることを示す。これらの型の解釈の詳細は,B-スプライン曲線エンティティの定義(4.4.29 参照)に

よる。

EXPRESS による定義

*)

TYPE knot_type = ENUMERATION OF

   (uniform_knots,

    unspecified,

    quasi_uniform_knots,

    piecewise_bezier_knots);


14

B 3700-42:1996 (ISO 10303-42:1994)

END_TYPE;

(*

列挙項目の定義

uniform_knots

:一様 B-スプライン曲線に適合するノットの形式。

unspecified

:ノットの型は,規定しない。非一様ノットの場合を含む。

quasi_uniform_knots

:準一様 B-スプライン曲線に適合するノットの形式。

piecewise_bezier_knots

:区分的ベジエ曲線に適合するノットの形式。

4.3.7

extent_enumeration  この型は,オブジェクトの定量的な大きさを規定するために用いる。

EXPRESS による定義

*)

TYPE extent_enumeration = ENUMERATION OF

   (invalid,

    zero,

    finite_non_zero,

    infinite);

END_TYPE;

(*

列挙項目の定義

invalid

:大きさの概念が計測される量に関して有効でない。

zero

:大きさが 0 とする。

finite_non_zero

:大きさは有限(有界)であるか,0 ではない。

infinite

:大きさが有限でない。

4.3.8

trimming_preference  この型は,パラメタ曲線のトリムの方法が多重に定義されている場合,優先

されるトリムの方法の方法を示す。

EXPRESS による定義

*)

TYPE trimming_preference = ENUMERATION OF

   (cartesian,parameter,

    unspecified);

END_TYPE;

(*

列挙項目の定義

cartesian

:cartesian_point によるトリムの方法が優先される。

parameter

:parameter_value が優先される。

unspecified

:優先される方法が指定されていない。

4.3.9

axis2_placement   こ の 選 択型 は,2 次元 又は 3 次元 のデ カ ルト 空間 で使 われる 2 種類 の

axis2_placement

からなる。これによって,配置に関する情報を必要とするエンティティは,空間次元数を

指定せずに参照できる。

EXPRESS による定義

*)


15

B 3700-42:1996 (ISO 10303-42:1994)

TYPE axis2_placement = SELECT

   (axis2_placement_2d,

    axis2_placement_3d);

END_TYPE;

(*

4.3.10  curve_on_surface  curve_on_surface は,パラメタ曲面上の曲線であり,次のどれであってもよい。

− pcurve

− surface_curve(intersection_curve 及び seam_curve の特別な下位型を含む。

− composite_curve_on_surface

curve_on_surface

選択型は,参照を目的としてこれらの曲線を集めたものとする。

EXPRESS による定義

*)

TYPE curve_on_surface = SELECT

   (pcurve,

    surface_curve,

    composite_curve_on_surface);

END_TYPE;

(*

4.3.11  pcurve_or_surface  この選択型によって,エンティティ surface_curve が,結合される surface 又は

pcurve

を一つの属性として表す。

EXPRESS による定義

*)

TYPE pcurve_or_surface = SELECT

   (pcurve,

    surface);

END_TYPE;

(*

4.3.12  trimming_select  この選択型は,パラメタ曲線をトリムする二つの可能な方法を示す。それらは,

曲線上の cartesian_point である点による方法か,又は曲線のパラメタ範囲のパラメタ値を定義する実数に

よる方法のいずれかとする。

EXPRESS による定義

*)

TYPE trimming_select = SELECT

   (cartesian_point,

    parameter_value);

END_TYPE;

(*

4.3.13  vector_or_direction  この型は,ベクトルの計算に使用できるエンティティの型を示す。

EXPRESS による定義

*)


16

B 3700-42:1996 (ISO 10303-42:1994)

TYPE vector_or_direction = SELECT

   (vector,

    direction);

END_TYPE;

(*

4.4

geometry_schema のエンティティ定義  ここでは,すべての明示的幾何エンティティを定義する。

パラメタ空間で定義されているエンティティを除き,すべての幾何は,右手系のデカルト座標系(幾何座

標系)で定義する。この座標系の空間次元数は,geometric_representation_item のコンテキストで決まる。

曲線及び曲面の定義は,本質的にはすべて点,ベクトル及び/又はスカラ値(長さ)によって与える。

4.4.1

geometric_representation_context  geometric_representation_context は,geometric_representation_item

が幾何的に基礎付けられている representation_context とする。

geometric_representation_context

は,独立した座標空間なので,特に適当な変換によって関係付けられる

場合を除いて,他の座標空間には,空間的に関係付けられていない(幾何的な基礎付け及び座標空間の定

義については,3.1 参照)

EXPRESS による定義

*)

ENTITY geometric_representation_context

   SUBTYPE  OF  (representation_context);

   coordinate_space_dimension  :  dimension_count;

END_ENTITY;

(*

属性定義

coordinate_space_dimension

:geometric_representation_context である座標空間の dimension_count。

備考 coordinate_space_dimension の許されている範囲に対する制約は,この規格の範囲外とする。

4.4.2  geometric_representation_item  geometric_representation item は,付加的な意味として幾何的な位置,

向き又はその両方をもつ representation_item とする。この意味は,次のいすれかによって表現される。

− cartesian_point 又は direction とする。

− cartesian_point 又は direction を直接的に参照する。

− cartesian_point 又は direction を間接的に参照する。

備考1. cartesian_point 又は direction を間接的に参照するとは,ある geometric_representation_item が一

つ以上の介在する属性を通じて cartesian_point 又は direction を参照することとする。多くの

場合,この情報は,axis2_placement の形で与える。

4.  円を考えた場合,それは axis2_placement を参照することによって,幾何的な位置及び

向きをもつ。axis2_placement は,一つの cartesian_point 及び幾つかの direction を参照

する。

5. manifold_solid_brep は,topological_representation_item の幾つかの階層を通じて curve,

sur-face

及び point を参照する geometric_representation_item とする。そして,曲線及び

曲面は,付加的なエンティティを介して cartesian_point 及び direction を参照する。

2.  介 在 す る エ ン テ ィ テ ィ は , す べ て representation_item で あ る か , 下 位 型

geometric_representation_item

である必要はない。上の manifold_solid_brep の例では,介在する


17

B 3700-42:1996 (ISO 10303-42:1994)

representation_item

の階層の一つは,closed_shell とする。これは,topological_representation_item

であって,

それ自体としては geometric_representation_context を必要としない。

closed_shell

は,

それ自体が geometric_representation_item である manifold_solid_brep の定義の一部として使わ

れた場合,geometric_representation_context に基礎付けられる。

3. geometric_representation_item は,representation 内の representation_context に関係付けられる必

要 性 を 継 承 す る 。 compatible_dimension

規 則 は , representation_context

geometric_representation_con-text

であることを保証している。幾何のコンテキストの中で,こ

の関係によって,geometric_repre-sentation_item は,幾何的に基礎付けられる。

EXPRESS による定義

*)

ENTITY geometric_representation_item

   SUPERTYPE OF (ONEOF(point, direction, vector, placement,

                   cartesian_transformation_operator,  curve,  surface,

                   edge_curve,  face_surface,  poly_loop,  vertex_point,

                   solid_model,  boolean_result,  sphere,  right_circular_cone,

                   right_circular_cylinder,  torus,  block,

                   right_angular_wedge,  half_space_solid,

                   shell_based_surface_model,  face_based_surface_model,

                   shell_based_wireframe_model,  edge_based_wireframe_model,

                   geometric_set))

   SUBTYPE  OF  (representation_item);

DERIVE

   dim : dimension_count := dimension_of(SELF);

WHERE

   WR1: SIZEOF (QUERY (using_rep <* using_representations (SELF) |

        NOT  ('GEOMETRY_SCHEMA,  GEOMETRIC_REPRESENTATION_CONTEXT'  IN

        TYPEOF  (using_rep,  context_of_items))))  =O;

END_ENTITY;

(*

属性定義

dim

:geometric_representation_item の座標の dimension_count。

備考1.  属 性 dim は , そ の geometric_representation_item が 幾 何 的 に 基 礎 付 け ら れ て い る

geometric_representation_context

の coordinate_space_dimension から導出される。

2. geometric_representation_item は,すべてが同じ coordinate_space_dimension をもつ,一つ以上

の geometric_representation_context において幾何的に基礎付けられているとする。4.5.1 

compatible_dimension

規則を参照する。

形式的要件

WR1 : geometric_representation_item を 参 照 す る 表 現 の コ ン テ キ ス ト は , す べ て

geometric_representation_context

と同じ型でなければならない。

4.4.3

point  point(点)は,実デカルト座標空間

R

m

m

=1

,2 又は 3)における配置とする。


18

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS による定義

*)

ENTITY point

   SUPERTYPE OF (ONEOF (cartesian_point, point_on_curve, point_on_surface,

                           point_replica,  degenerate_pcurve))

   SUBTYPE  OF  (geometric_representation_item);

END_ENTITY;

(*

4.4.4

cartesian_point  cartesian_point は,直交デカルト座標系又はパラメタ空間における座標によって定

義される point とする。このエンティティは,1∼3 次元の空間中で定義され,その次元数は,リスト

coordinates

の要素数で示される。

備考  この規格では,幾何を定義する目的として 2 次元又は 3 次元の点だけを使う。

EXPRESS による定義

*)

ENTITY cartesian_point

   SUBTYPE  OF  (point);

   coordinates : LIST [1:3]OF length_measure;

END_ENTITY;

(*

属性定義

coordinates[1]

:point の配置の第 1 座標。

coordinates[2]

:point の配置の第 2 座標,1 次元の点の場合には存在しない。

coordinates[3]

:point の配置の第 3 座標,1 次元又は 2 次元の点の場合には存在しない。

SELF

\ geometric_representation_item.dim : point が 定 義 さ れ て い る 空 間 の 次 元 数 。 こ れ は

geometric_representation_item

の上位型から継承される誘導属性であって,cartesian_point に対してはリスト

coordinates

の要素数によって定まる。

4.4.5

point_on_curve  point_on_curve は,curve 上にある point とする。point は,特定のパラメタ値に対

する curve を評価することによって定まる。

point

の座標空間の次元数は,

basis_curve

のそれと同じとする。

EXPRESS による定義

*)

ENTITY point_on_curve

   SUBTYPE  OF  (point);

   basis_curve :  curve;

   point_parameter

:  parameter_value;

END_ENTITY;

(*

属性定義

basis_curve

:point_parameter が関係している curve。

point_parameter

:point の配置のパラメタの値。

SELF

\geometric_representation_item.dim:point_on_curve が定義される空間の次元数。これは basis_curve の


19

B 3700-42:1996 (ISO 10303-42:1994)

それと同じとする。

非形式的要件

IP1:point_parameter の値は,curve のパラメタ範囲外であってはならない。

4.4.6

point_on_surface  point_on_surface は,パラメタ曲面である surface の上にある point とする。point

は,特定のパラメタ値の組に対する surface を評価することによって定義する。

EXPRESS による定義

*)

ENTITY point_on_surface

   SUBTYPE  OF  (point);

   basis_surface

:  surface;

   point_parameter_u  :  parameter_value;

   point_parameter_v  :  parameter_value;

END_ENTITY;

(*

属性定義

basis_surface

:パラメタ値が関係している surface。

point_parameter_u

:point の配置の最初のパラメタ値。

point_parameter_v

:point の配置の 2 番目のパラメタ値。

SELF

\geometric_representation_item.dim:point_on_surface の座標空間の次元数。

basis_surface

のそれと同じとする。

非形式的要件

IP1:u 及び v として指定されるパラメタ値は,basis_surface のパラメタ範囲外であってはならない。

4.4.7

point_replica  これは,異なる配置に存在する point(親)の複製(replica)を定義する。複製は,

親の point と同じ座標空間の次元数をもつ。

EXPRESS による定義

*)

ENTITY point_replica

   SUBTYPE  OF  (point);

   parent_pt      :  point;

   transformation  :  cartesian_transformation_operator;

WHERE

   WR1:  transformation.dim  =  parent_pt.dim;

   WR2:  acyclic_point_replica  (SELF,parent_pt);

END_ENTITY;

(*

属性定義

parent_pt

:複製される point。

transformation

:point_replica の配置を定義する cartesian_transformation_operator。

形式的要件

WR1:変換属性の座標空間の次元数は,parent_pt のそれと一致しなければならない。


20

B 3700-42:1996 (ISO 10303-42:1994)

WR2:point_replica は,それ自身の定義に用いてはならない。

4.4.8

degenerate_pcurve  degenerate_pcurve は,pcurve の構造をもつエンティティであるが,3 次元モデ

ル空間で 1 点に縮退したものとする。そのために,これは curve の下位型ではなく,point の下位型とする。

備考  例えば,円錐の頂点は,degenerate_pcurve として表現することもできる。

EXPRESS による定義

*)

ENTITY degenerate_pcurve

   SUBTYPE  OF  (point);

   basis_surface:  surface;

   reference_to_curve  :  definitional_representation;

WHERE

   WR1:  SIZEOF(reference_to_curve

\representation.items) = 1;

   WR2:  'GEOMETRY_SCHEMA.CURVE'  IN  TYPEOF

                   (reference_to_curve

\representation.items[1]);

   WR3:  reference_to_curve

\representation.

                   items[1]

\geometric_representation_item.dim =2;

END_ENTITY;

(*

属性定義

basis_surface

:そのパラメタ空間において,縮退した曲線が定義される曲面。

reference_to_curve

:degenerate_pcurve を定義するパラメタ空間曲線への関連付け。

形式的要件

WR1:reference_to_curve に対応するエンティティ definitional_representation 内の要素の集合は,ちょうど一

つの要素をもたなければならない。

WR2:集合内の唯一の要素は,curve とする。

WR3:このパラメタ空間曲線の次元数は,2 とする。

非形式的要件

IP1:モデル空間の曲線とみなせば,degenerate_pcurve は,0 の弧長をもたなければならない。

4.4.9

evaluated_degenerate_pcurve  このエンティティは,degenerate_pcurve を評価した結果を表現し,

それと cartesian_point とを関連付けする。

EXPRESS による定義

*)

ENTITY evaluated_degenerate_pcurve

   SUBTYPE  OF  (degenerate_pcurve);

   equivalent_point  :  cartesian_point;

END_ENTITY;

(*

属性定義

equivalent_point

:degenerate_pcurve で表現される幾何座標系内の点。


21

B 3700-42:1996 (ISO 10303-42:1994)

4.4.10  direction  このエンティティは,2 次元又は 3 次元の空間内の一般的な方向ベクトルを定義する。

ベクトルの成分の実際の大きさは,定義される方向には影響を与えず,x:y:z 又は x:y の比だけが意味をも

つ。

備考  このエンティティの成分は,正規化されていない。単位ベクトルが必要な場合,使用される前

に正規化する必要がある。

EXPRESS による定義

*)

ENTITY direction

   SUBTYPE  OF  (geometric_representation_item);

   direction_ratios  :  LIST  [2:3]OF  REAL;

WHERE

   WR1: SIZE0F(QUERY(tmp <* direction_ratios | tmp <> 0.0)) > 0;

END_ENTITY;

(*

属性定義

direction_ratios[1]

:X 軸方向の成分。

direction_ratios[2]

:Y 軸方向の成分。

direction_ratios[3]

:Z 軸方向の成分。2 次元の座標空間の場合は存在しない。

SELF

\ geometric_representation_item.dim : direction の 座 標 空 間 の 次 元 数 。 こ れ は , 上 位 型

geometric_representation_item

から継承された属性であり,このエンティティに対しては,リスト内の

direction_ratios

リストの要素数字で定義される。

形式的要件

WR1:方向ベクトルの大きさは,0 より大きくなければならない。

4.4.11  vector  このエンティティは,方向及び大きさによってベクトルを定義する。属性 magnitude の値

は,ベクトルの大きさを定義する。

備考  ベクトルの大きさは,属性 orientation の構成要素から計算してはならない。数値の不安定

性を減らすために,このような表現形式がとられている。例えば,大きさが 2.0mm で各軸

と等しい角度を有するベクトルは,属性 orientation を (1.0,1.0,1.0) として表現されること

もある。

EXPRESS による定義

*)

ENTITY vector

   SUBTYPE  OF  (geometric_representation_item);

   orientation :  direction;

   magnitude

: length_measure;

WHERE

   WR1:  magnitude  >=0.0;

END_ENTITY;

(*

属性定義


22

B 3700-42:1996 (ISO 10303-42:1994)

orientation

:vector の方向。

magnitude

:vector の大きさ。magnitude が 0.0 の vector は,属性 orientation にかかわらず,すべて値が同じ

とみなす。

SELF

\geometric_representation_item.dim:vector が定義される空間の次元数。

形式的要件

WR1:magnitude は,正又は 0 でなければならない。

4.4.12  placement  placement は,幾何のコンテキストの座標系に関して,幾何要素の配置を決める。これ

は定義される要素の配置を決め,下位型の場合は,その向きを与える。

EXPRESS による定義

*)

ENTITY placement

   SUPERTYPE  OF  (ONEOF(axis1_placement,axis2_placement_2d,axis2_placement_3d))

   SUBTYPE  OF  (geometric_representation_item);

   location  :  cartesian_point;

END_ENTITY;

(*

属性定義

location

:配置される要素の,例えば円の中心のような,参照点の幾何的な位置。

4.4.13  axis1_placement  一つの軸の 3 次元空間における方向及び配置。axis1_placement は,(上位型から

継承される)配置する点及び軸の方向によって定義される。軸の方向は,axis の方向又は (0.0,0.0,1.0) と

いう暗黙値のいずれかとする。この placement の実際の方向は,誘導属性 z によって与える。

EXPRIESS による定義

*)

ENTITY axis1_placement

   SUBTYPE  OF  (placement);

   axis  :  OPTIONAL  direction;

DERIVE

   z : direction : =NVL(normalise(axis), direction([0.0,0.0,1.0]));

WHERE

   WR1:  SELF

\geometric_representation_item.dim = 3;

END_ENTITY;

(*

属性定義

SELF

\placement.location:軸上の参照点。

axis

:局所的な Z 軸の方向。

z

:局所座標系における Z 軸の方向を示す正規化された direction。

SELF

\geometric_representation_item.dim:axis1_placement の空間次元数で,その location から決められ,常

に 3 とする。

形式的要件

WR1:座標空間の次元数は,3 とする。


23

B 3700-42:1996 (ISO 10303-42:1994)

4.4.14  axis2_placement_2d  二つの互いに垂直な軸の 2 次元空間における配置及び向き。

axis2_placement_2d

は,(上位型から継承される)点及び軸によって定義される。これは,2 次元空間にお

けるオブジェクトの配置及び向きを決めるため,すなわち,配置座標系を定義するために用いられる。こ

のエンティティは,配置座標系の原点となる点を含む。配置座標系の定義を完全にするために,方向ベク

トルが必要となる。ref_direction は,配置座標系 X 軸の方向を定義する。配置座標系 Y 軸の方向は,それ

から導出される。

EXPRESS による定義

*)

ENTITY axis2_placement_2d

   SUBTYPE  OF  (placement);

   ref_direction  :  OPTIONAL  direction;

DERIVE

   p  : LIST [2:2]OF direction : = build_2axes(ref_direction);

WHERE

   WR1:SELF

\geometric_representation_item.dim = 2;

END_ENTITY;

(*

属性定義

SELF

\placement.location:結合された配置座標系の原点を定義する参照点の空間的な位置。

ref_direction

:局所座標系 X 軸の方向を定めるための direction。ref_direction が省略された場合,この方向

は,幾何座標系から決める。

p

:配置座標系のための軸の集合。

p[1]

:配置座標系における X 軸の方向を示す正規化された direction。ref_direction が省略された場合は,

(1.0,0.0)

とする。

p[2]

:配置座標系における Y 軸の方向を示す正規化された direction。これは,誘導属性であって p[1]と直

交する。

形式的要件

WR1:axis2_placement_2d の空間次元数は,2 とする。

4.4.15  axis2_placement_3d  二つの互いに垂直な軸の 3 次元空間における配置及び向き。

axis2_placement_3d

は,(上位型から継承される)点及び(理想的には直交している)二つの軸によって定

義される。これは,空間内の軸対称でないオブジェクトの配置及び向きを決めるため,すなわち,配置座

標系を定義するために用いることができる。このエンティティは,配置座標系の原点となる点を含む。配

置座標系の定義を完全にするために,二つの方向ベクトルが必要となる。axis は,配置座標系の Z 軸方向

とし,ref_direction は,配置座標系の X 軸方向の近似とする。

備考  を配置座標系の Z 軸方向,を配置座標系の X 軸方向の近似とする。配置座標系の X 軸

及び Y 軸の方向を計算するために,二つの方法がある。これらは,数学的には同じである

が,数値的には異なることもある。

(a)  配置座標系の X 軸の方向を x=<a−(az)z>として与える。このとき,ベクトル は,

原点 及びベクトル で定義される平面に投影される。

配置座標系の Y 軸の方向を y=

z×x>で与える。


24

B 3700-42:1996 (ISO 10303-42:1994)

(b)  配置座標系の Y 軸の方向を y=<z×a>として求め,次に配置座標系の X 軸の方向を

x=<y×z>で与える。

数値的に,より安定している可能性が高いことから,二つのうち,最初の方法を使用す

る。

円錐曲線及び初等曲面に関しては,パラメタ式によって参照される配置座標系は,axis2_placement_3d

から導かれる。

EXPRESS による定義

*)

ENTITY axis2_placement_3d

   SUBTYPE  OF  (placement);

   axis  :  OPTIONAL  direction;

   ref_direction  :  OPTIONAL  direction;

DERIVE

   p  : LIST [3:3]OF direction := build_axes(axis,ref_direction);

WHERE

   WR1:  SELF

\placement .location .dim = 3;

   WR2: (NOT (EXISTS (axis))) OR (axis .dim = 3);

   WR3: (NOT (EXISTS (ref_direction))) OR (ref_direction .dim = 3);

   WR4: (NOT (EXISTS (axis))) OR (NOT (EXISTS (ref_direction))) OR

          (cross_product(axis  ,ref_direction).magnitude  >  0.0);

END_ENTITY;

(*

属性定義

SELF

\placement.location:参照点,すなわち,結合された配置座標系の原点の空間的な位置。

axis

:局所座標系における Z 軸の正確な方向を示す direction。

ref_direction

:局所座標系における X 軸の方向を定めるための direction。必要であれば,X 軸の方向と axis

との直交性を維持するために調整が行われる。axis 及び/又は ref_direction が省略された場合,それらの

方向は,幾何座標系からとられる。

p

:配置座標系の軸。これらの軸の direction は,必要に応じて,属性から適切な暗黙値を用いて得ること

ができる。

p[1]

:局所座標系における X 軸の方向を示す正規化された direction。

p[2]

:局所座標系における Y 軸の方向を示す正規化された direction。

p[3]

:局所座標系における Z 軸の方向を示す正規化された direction。

備考  属性の解釈については,図 参照。

形式的要件

WR1:SELF\placement.location の空間次元数は,3 とする。

WR2:axis の空間次元数は,3 でなければならない。

WR3:ref_direction の空間次元数は,3 とする。

WR4:axis 及び ref_direction は,平行又は逆向きに平行であってはならない(これは build_axes 関数に必

要である。)。


25

B 3700-42:1996 (ISO 10303-42:1994)

4.4.16  cartesian_transformation_operator  cartesian_transformation_operator は,平行移動,回転移動,鏡

像反転及び一様な拡大・縮小からなる幾何変換を定義する。

正規化されたベクトルのリスト は,直交行列 の列を定義する。これらのベクトルは,関数 base_axis

によって,direction 型の属性 axis1 及び axis2 から計算される。cartesian_transformation_operator_3d の場合,

axis3

も使われる。|T|=−1 の場合,鏡像反転を含む。局所座標系の原点 A,縮尺の倍率

S

,及び行列 T,に

よって変換を定義する。

位置ベクトルが である point に対する変換は,次のとおり定義される。

PA+STP

方向が である direction に対する変換は,次のとおり定義される。

dTd

図 1  axis2_placement_3d

向きが で,大きさが

k

である vector に対する変換は,次のとおり定義される。

dTd

k

→Sk

axis2_placement

型の属性をもつエンティティの場合には,配置座標系の方向を定義する誘導属性 p は,先

に導出されてから変換が適用される。surface の場合には,変換後の任意の点での曲面の法線は,元の曲面

に対応する点における法線を変換することで得られる。長さの次元をもつ属性(円の半径など)を有する

幾何エンティティの場合には,その値は

S

倍される。

曲線上の曲面の場合には,pcurve.reference_to_curve は,いかなる変換にも影響されない。

cartesian_transformation_operator

は,各軸が同じ単位をもつ整合性のある単位系 (system of units) におい

て定義された幾何だけに適用されなければならない。すべての属性が省略された場合,変換は,恒等変換

とする。cartesian_transformation_operator は,その下位型の一つとしてだけインスタンス化されなければな

らない。


26

B 3700-42:1996 (ISO 10303-42:1994)

備考  変換の効果については,図 2(a)(c)]参照。

EXPRESS による定義

*)

ENTITY cartesian_transformation_operator

   SUPERTYPE  OF(ONEOF(cartesian_transformation_operator_2d,

                               cartesian_transformation_operator_3d))

   SUBTYPE  OF  (geometric_representation_item,

                            functionally_defined_transformation);

   axis1        :  OPTIONAL  direction;

   axis2        :  OPTIONAL  direction;

   local_origin  :  cartesian_point;

   scale        :  OPTIONAL  REAL;

図 2  (a)cartesian_transformation_operator_3d

DERIVE

   sc1          :  REAL  :=  NVL(scale,  1.0);

WHERE

   WR1:  sc1  >  0.0;

END_ENTITY;

(*

属性定義

axis1

:導出される X 軸の方向を示す u[1]を定めるための direction。

axis2

:導出される Y 軸の方向を示す u[2]を定めるための direction。

local_origin

:平行移動を示す cartesian_point。この属性は,省略できない変換における平行移動は,幾何空

間の原点から local_origin までとする。

scale

:変換のために指定された拡大・縮小の倍率。

scl

:誘導属性の変換の倍率

S

。scale が存在すればそれに等しく,存在しなければ 1.0 とする。


27

B 3700-42:1996 (ISO 10303-42:1994)

形式的要件

WR1:求められた縮尺 scl は,0 より大きくなければならない。

4.4.17  cartesian_transformation_operator_3d  cartesian_transformation_operator_3d は,3 次元空間内の平行

移動,回転移動,鏡像反転及び一様な拡大・縮小からなる幾何変換を定義する。

正規化されたベクトルのリスト は,直交行列 の列を定義する。これらのベクトルは,関数 base_axis

によって,direction 型の属性 axis1,axis2 及び axis3 から計算される。|T|=−1 の場合,変換は,鏡像反転

を含む。

EXPRESS による定義

*)

ENTITY cartesian_transformation_operator_3d

   SUBTYPE  OF  (cartesian_transformation_operator);

   axis3  :  OPTIONALdirection;

DERIVE

図 2  (b)cartesian_transformation_operator_3d

   u     :  LIST[3:3]OF  direction

         :=  base_axis(3,  SELF

\cartesian_transformation_operator .axis1,

                         SELF

\cartesian_transformation_operator .axis2,axis3);

WHERE

   WR1:  SELF

\cartesian_transformation_operator .dim = 3;

END_ENTITY;

(*

属性定義

SELF

\cartesian_transformation_operator.axis1:導出される X 軸の方向を示す u[1]を定めるための direction。

必要であれば,u[1]は,u[3]と直交するように調整される。

SELF

\cartesian_transformation_operator.axis2:導出される Y 軸の方向を示す u[2]を定めるための direction。

必要であれば,u[2]は,u[1]及び u[3]と直交するように調整される。


28

B 3700-42:1996 (ISO 10303-42:1994)

SELF

\cartesian_transformation_operator.axis3:導出される Z 軸の方向を示す u[3]の direction。

SELF

\cartesian_transformation_operator.local_origin:平行移動を示す cartesian_point。この属性は,省略で

きない変換における平行移動は,幾何空間の原点から local_origin までとする。

SELF

\cartesian_transformation_operator.scale:変換のために指定された拡大・縮小の倍率。

SELF

\geometric_representation_item.scl:誘導属性の変換の倍率

S

。scale が存在すればそれに等しく,存在

しなければ 1.0 とする。

u

:変換行列 を定義する互いに直交する正規化されたベクトルのリスト。明示された属性 axis3,axis1

及び axis2 からこの順で得られる。

形式的要件

WR1:このエンティティの座標空間の次元数は,3 とする。

4.4.18  cartesian_transformation_operator_2d  cartesian_transformation_operator_2d は,2 次元空間内の平行

移動,回転移動,鏡像反転及び一様な拡大・縮小からなる幾何変換を定義する。

図 2  (c)cartesian_transformation_operator

正規化されたベクトルのリスト は,直交行列 の列を定義する。これらのベクトルは,関数 base_axis

によって direction 型の属性 axis1 及び axis2 から計算される。|T|=−1 の場合,変換は,鏡像反転を含む。

EXPRESS による定義

*)

ENTITY cartesian_transformation_operator_2d

   SUBTYPE  OF  (cartesian_transformation_operator);

DERIVE

   u : LIST[2:2]OF direction :=

      base_axis(2,SELF

\cartesian_transformation_operator .axis1,

                SELF

\cartesian_transformation_operator .axis2,?);

WHERE

   WR1:  SELF

\cartesian_transformation_operator .dim = 2;

END_ENTITY;


29

B 3700-42:1996 (ISO 10303-42:1994)

(*

属性定義

SELF

\cartesian_transformation_operator.axis1:導出される X 軸の方向を示す u[1]を定めるための direction。

SELF

\cartesian_transformation_operator.axis2:導出される Y 軸の方向を示す u[2]を定めるための direction。

SELF

\cartesian_transformation_operator.local_origin:平行移動を示す cartesian_point。この属性は,省略で

きない変換における平行移動は,幾何空間の原点から local_origin までとする。

SELF

\cartesian_transformation_operator.scale:変換のために指定された拡大・縮小の倍率。

SELF

\cartesian_transformation_operator.scl:誘導属性の変換の倍率

S

。scale が存在すればそれに等しく,存

在しなければ 1.0 とする。

u

:変換行列 を定義する互いに直交する正規化されたベクトルのリスト。明示された属性 axis1 及び axis2

からこの順で得られる。

形式的要件

WR1:このエンティティの座標空間の次元数は,2 とする。 
4.4.19  curve  curve(曲線)は,座標空間の中を動く点の軌跡とみなす。

EXPRESS による定義

*)

ENTITY curve

   SUPERTYPE OF (ONEOF(line, conic, pcurve, surface_curve,

                          offset_curve_2d,  offset_curve_3d,  curve_replica))

   SUBTYPE  OF  (geometric_representation_item);

END_ENTITY;

(*

非形式的要件

IP1:curve は,弧状連結とする。

IP2:curve は,0 を超える弧長をもたなければならない。

4.4.20  line  line(直線)は,一定の接線方向をもった境界のない curve とする。line は,point 及び direction

によって定義する。line の正の方向は vector 型 dir の方向とする。

曲線は,次のとおりパラメタ化される。

P=pnt

V=dir 
λ(

u

)=P

u

V

パラメタ範囲は,−∞<

u

<∞とする。

EXPRESS による定義

*)

ENTITY line

   SUBTYPE  OF  (curve);

   pnt  :  cartesian_point;

   dir  :  vector;

WHERE

   WR1:  dir.dim  =  pnt.dim;


30

B 3700-42:1996 (ISO 10303-42:1994)

END_ENTITY;

(*

属性定義

pnt

:line の配置。

dir

:line の方向。dir の大きさ及び単位は,line のパラメタ化に影響する。

SELF

\ geometric_representation_item.dim : line に 対 す る 座 標 空 間 の 次 元 数 。 こ れ は , 上 位 型

geometric_representation_item

から継承された属性とする。

形式的要件

WR1:pnt 及び dir は,両者ともに,2 次元のエンティティ又は 3 次元のエンティティとする。 
4.4.21  conic  conic(円錐曲線)は,平面と円錐との交差によって生成できる平面曲線とする。

conic

は,他の幾何によってではなく,自身の幾何的な性質によって定義する。

conic

は,常に,axis2_placement によって定義された配置座標系をもつ。パラメタ表現は,この配置座標

系によって定義する。

EXPRESS による定義

*)

ENTITY conic

   SUPERTYPE OF (ONEOF(circle, ellipse, hyperbola, parabola))

   SUBTYPE  OF  (curve);

   position:  axis2_placement;

END_ENTITY;

(*

属性定義

position

:conic の配置及び向き。この属性に関する解釈の詳細は,個別の下位型に対して与えられる。

4.4.22  circle  circle(円)は,半径並びに円の配置及び向きによって定義する。データは,次のとおり解

釈する。

C=position.location(中心)

x=position.p[1]

y=position.p[2]

z=position.p[3]

R=radius

更に circle は,次のとおりパラメタ化する。

λ(

u

)=C+

R

((cos

u

)x+(sin

u

)y)

パラメタ化範囲は,0°≦

u

≦360°とする。

上で定義された配置座標系において,circle は,方程式

C

=0

を満たす。ここで,

C(x, y, z)=x

2

+y

2

-

R

2

とする。任意の点における circle の正の向きは,次式で与えられる曲線の接線方向 とする。

T=(-

C

y

,

C

x

,0)

備考  円弧は,エンティティ trimmed_curve をエンティティ circle とともに使用することによって

定義する。

EXPRESS による定義


31

B 3700-42:1996 (ISO 10303-42:1994)

*)

ENTITY circle

   SUBTYPE  OF  (conic);

   radius   :  positive_length_measure;

END_ENTITY;

(*

属性定義

SELF

\conic.position.location:この継承された属性は,円の中心を定義する。

radius

:円の半径。これは,0 より大きくなければならない。

備考  属性の解釈は,図 による。

4.4.23  ellipse  ellipse(だ円)は,長半径及び短半径の長さ,並びに曲線の位置(中心,すなわち,焦点

を結ぶ線分の中点)及び向きによって定義される円錐曲線とする。

データは,次のとおり解釈する。

C=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]

R1=semi_axis_1

R2=semi_axis_2

更に ellipse は,次のとおりパラメタ化する。

λ(

u

)=C+(

R

1

 cos

u

)x+(

R

2

 sin

u

)y

図 3  circle

パラメタ化範囲は,0°≦

u

≦360°とする。

上で定義された配置座標系において,ellipse は,方程式

C

=0

を満たす。ここで,


32

B 3700-42:1996 (ISO 10303-42:1994)

1

/

/

)

,

,

(

2

2

2

2

1

2

R

y

R

x

z

y

x

C

とする。任意の点における ellipse の正の向きは,次式で与えられる曲線の接線方向

T

とする。

T

=(-C

y

C

x

, 0)

EXPRFSS による定義

*)

ENTITY ellipse

   SUBTYPE  OF  (conic);

   semi_axis_1  :  positive_length_measure;

   semi_axis_2  :  positive_length_measure;

END_ENTITY;

(*

属性定義

SELF

\conic.position:SELF\conic.position.location は,だ円の中心とし,SELF\conic.position.p[1]は,

semi_axis1

に対応する軸の方向とする。

semi_axis_1

:だ円の第 1 の半径とする。正でなければならない。

semi_axis_2

:だ円の第 2 の半径とする。正でなければならない。

備考 

属性の解釈は,

図 4

による。

4.4.24

hyperbola

  hyperbola(双曲線)は,長半径(major radius)及び短半径(minor radius)の長さ,並

びに曲線の位置(焦点を結ぶ線分の中点)及び向きによって定義される円錐曲線とする。

図 4  ellipse

データは,次のとおり解釈する。

C

=position.location

x=position.p[1]

y=position.p[2]


33

B 3700-42:1996 (ISO 10303-42:1994)

z=position.p[3]

R

1

=semi_axis

R

2

=semi_imag_axis

更に hyperbola は,次のとおりパラメタ化する。

λ

(u)=

C

+(

R

1

 cosh u)

x

+(

R

2

 sinh u)

y

パラメタ化範囲は,-∞<u<∞とする。

上で定義された配置座標系において,hyperbola は,方程式 C=0 を満たす。ここで,

1

/

/

)

,

,

(

2

2

2

2

1

2

R

y

R

x

z

y

x

C

とする。任意の点における hyperbola の正の向きは,次式で与えられる曲線の接線方向

T

とする。

T

=(

C

y

, C

x

, 0)

表現されている hyperbola は,x 方向に存在するものだけとする。

EXPRESS による定義

*)

ENTITY hyperbola

図 5  hyperbola

   SUBTYPE  OF  (conic);

   semi_axis      :  positive_length_measure;

   semi_imag_axis  :  positive_length_measure;

END_ENTITY;

(*

属性定義

SELF

\conic.position:曲線の配置及び向き。SELF\conic.position.location は,hyperbola の中心とし,SELF

\conic.position.p[1]は,semi_axis に対応する方向とする。定義される曲線は,SELF\conic.position.p[1]の

正の側に存在する。


34

B 3700-42:1996 (ISO 10303-42:1994)

semi_axis

:hyperbola の半軸 (semi axis) の長さ。これは,正とし,hyperbola の 2 本の曲線の間の最短距離

の半分とする。

semi_imag_axis

:hyperbola の半虚軸  (semi imagenary axis)  の長さ。正でなければならない。

備考 

属性の解釈は,

図 5

による。

形式的要件

WR1

semi_axis

の長さは,0 より大きくなければならない。

WR2

:semi_imag_axis の長さは,0 より大きくなければならない。

4.4.25

parabola

  parabola(放物線)は,その焦点距離,位置(頂点)及び向きによって定義される円錐

曲線とする。

データは,次のとおり解釈する。

C

=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]

F=focal_dist

図 6  parabola

更に parabola は,次のとおりパラメタ化する。

λ

(u)=

C

+F(u

2

x

+2u

y

)

パラメタ化範囲は,−∞<u<∞とする。

上で定義された配置座標系において,放物線は,方程式 C=0 を満たす。ここで,

C(xyz)=4Fx

y

2

とする。任意の点における曲線の正の向きは,次式で与えられる曲線の接線方向

T

とする。ここで,

T

=(-C

y

C

x

, 0)

とする。

EXPRESS による定義


35

B 3700-42:1996 (ISO 10303-42:1994)

*)

ENTITY parabola

   SUBTYPE  OF  (conic);

   focal_dist  :  length_measure;

WHERE

   WR1:  foca1_dist  <>  0.0;

END_ENTITY;

(*

属性定義

SELF

\conic.position:曲線の配置及び向き。SELF\conic.position.location は,放物線の頂点とし,SELF\

conic.position.p[1]

は,対称軸とする。

focal_dist

:頂点から焦点までの距離。

備考 

属性の解釈は,

図 6

による。

形式的要件

WR1

焦点距離は,0 であってはならない。

4.4.26

bounded_curve

  bounded_curve は,同定可能な端点をもつ有限弧長の curve とする。

EXPRESS による定義

*)

ENTITY bounded_curve

   SUPERTYPE OF (ONEOF(polyline, b-spline_curve, trimmed_curve,

                         bounded_pcurve,  bounded_surface_curve,  composite_curve))

   SUBTYPE  OF  (curve);

END_ENTITY;

(*

非形式的要件

IP1

:bounded_curve は,有限弧長をもつ。

IP2

:bounded_curve は,開始点及び終了点をもつ。

4.4.27

polyline

  polyline は,個の点 P

1

P

n

のリストによって定義される n−1 個の直線セグメントから

なる bounded_curve とする。

曲線の 番目のセグメントは,次のとおりパラメタ化する。

λ

(u)=

P

i

(i-u)+

P

i+1

(u+1

i)  ただし,1≦in−1

ここで、i−1≦uとし,かつパラメタ範囲は 0≦un−1 とする。

EXPRESS による定義

*)

ENTITY polyline

   SUBTYPE  OF  (bounded_curve);

   points  :  LIST[2:?]OF  cartesian_point;

END_ENTITY;

(*

属性定義


36

B 3700-42:1996 (ISO 10303-42:1994)

points

:polyline を定義する point。

4.4.28

b_spline_curve

  b_spline_curve(B-スプライン曲線)は,制御点及び基底関数によって定義される

区分的な多項式又は有理式のパラメタ曲線とする。b_spline_curve は,多項式又は有理式のパラメタ的な曲

線のすべての型を表現するための最も安定した形式として選択された。適切な属性の値によって,明示的

な多項式,有理式,ベジエ又は B-スプラインの各型の単一のセグメント又はスプライン曲線を表現するこ

とができる。b_spline_curve は,単純な暗黙の設定が可能なように,ノット及びノット多重度が導出できる

特別な下位型を 3 個もつ。

備考1.

 b_spline_curve

の暗黙値及び下位型の識別は,性能の考慮のために及び計算の実行におけ

る効率の問題のために重要である。

2.

 B-

スプラインが有理式であるとは,重みの中に等しくないものが存在することをいう。

これは,下位型 rational_b_spline_curve によって表現することができる。多項式ならば,

重みは,すべて暗黙で 1 にしてもよい。

3.

 b_spline_curve

が一様,準一様,又はベジエの場合(区分的ベジエの場合を含む。

,ノッ

ト及びノット多重度は,暗黙にしてもよい(すなわち,属性定義によって指定されたデ

ータが存在しなくてもよい。

4.

ノットを暗黙にする場合,離れたノットの間の差は,1.0 が仮定され,その曲線の有効な

パラメタ範囲は,0.0 から始まる。これらの暗黙は,下位型が与える。

5.

非一様の場合には,ノット及びノット多重度は,暗黙にしてはならない。

6.

重み及びノットの暗黙化は,互いに独立に行われる。

7.

 B-

スプライン基底関数

)

(u

N

d

i

の定義は,

附属書 E

(参考)の E

1

E

3

による。これらの参

考文献における用語の違いには,注意を要する。

データは,次のとおりに解釈する。

(a)

多項式の場合,曲線は,次で与えられる。

å

k

i

d

i

i

u

N

u

0

)

(

)

(

P

λ

(b)  有理式の場合,すべての重みは,正でなければならない。更に曲線は,次で与えられる。

å

å

k

i

d

i

i

k

i

d

i

i

i

u

N

w

u

N

w

u

0

0

)

(

)

(

)

(

P

λ

ここで,

k+1=

制御点の数

P

i

=

制御点

w

i

=

重み

d=

次数

とする。ノット配列は,(d+k+2)  個の実数  [u

-d

,

…, u

k+1

]

の配列であって,すべての添字 j∈[−dk]  に対し

て u

j

u

j+1

が成り立つものとする。この配列は,リスト knots から,多重度に応じて各多重ノットを繰り返

すことで得られる。番目の次数 の正規化された B-スプライン基底関数

d

i

N

は,この配列の部分集合  [u

i

d

,

…, u

i

1

]

上で定義される。

(c)  をノットリストの dk+2 個のノットの中の相異なる値の個数とする。は,“ノットの添字の上限


37

B 3700-42:1996 (ISO 10303-42:1994)

(upper_index_of_knots)

”として参照される。m

j

を,相異なるノットの 番目の値の多重度(すなわち反

復の数)とする。したがって

2

0

k

d

m

L

i

i

å

となる。すべてのノット多重度は,最初のもの及び最後のものを除き,1∼の範囲になければならない。

最初のもの及び最後のものは,最大で d+1 をとることができる。基底関数の値を求める場合,例えば,多

重度 3 のノット は,ノット配列における並び u,u,として解釈される。

備考  曲線定義の制御点に関する詳細な情報は,図 による。

EXPRESS による定義

*)

ENTITY b_spline_curve

   SUPERTYPE  OF  (ONEOF(uniform_curve,  b_spline_curve_with_knots,

                          quasi_uniform_curve,  bezier_curve)

                            ANDOR  rational_b_spline_curve)

   SUBTYPE  OF  (bounded_curve);

   degree  :  INTEGER;

   control_points_list : LIST [2:?]OF cartesian_point;

   curve_form  :  b_spline_curve_form;

   closed_curve  :  LOGICAL;

図 7  b_spline_curve

   self_intersect  :  LOGICAL;

DERIVE

   upper_index_on_control_points

:INTEGER

 := (SIZEOF(control_points_list) -1);

   control_points

:  ARRAY  [0:upper_index_on_control_points]

                                            OF  cartesian_point


38

B 3700-42:1996 (ISO 10303-42:1994)

 :=  list_to_array(control_points_list,0,

                                       upper_index_on_control_points);

WHERE

   WR1:('GEOMETRY-SCHEMA.UNIFORM_CURVE'  IN  TYPEOF(self))  OR

 ('GEOMETRY_SCHEMA.QUASI_UNIFORM_CURVE' IN TYPEOF(self)) OR

 ('GEOMETRY-SCHEMA.BEZIER_CURVE' IN TYPEOF(self)) OR

 ('GEOMETRY_SCHEMA.B_SPLINE_CURVE_WITH_KNOTS' IN TYPEOF(self));

END_ENTITY;

(*

属性定義

degree

:基底関数の代数的な次数。

control_points_list

:曲線の制御点のリスト。

curve_form

:特定の曲線形状の識別子。これは,参考とする(詳細は,4.3.4 参照)。

closed_curve

:曲線が閉じているかどうかの表示。これは,参考とする。

self_intersect

:曲線が自己干渉するかどうかを示すフラグ。これは,参考とする。

SELF

\geometric_representation_item.dim:曲線の座標空間の次元数。

upper_index_on_control_points

:制御点の配列の添字の上限。添字の下限は,0 とする。この値は,control_points

から導出される。

control_points

:曲線の幾何を定義するために使われる制御点の配列。これは,control_points_list から導出

される。

備考  データの一部が“参考”として記述されている属性値と曲線自身から得られる特性とが一

致しない場合,曲線データが優先される。

形式的要件

WR1 : こ の エ ン テ ィ テ ィ の イ ン ス タ ン ス 化 は , 下 位 型 の b_spline_curve_with_knots, uniform_curve,

quasi_uniform_curve

又は bezier_curve のうちの 1 個でなければならない。

4.4.29  b_spline_curve_with_knots  これは,b_spline_curve の下位型であって,ノットの値が明示的に与え

られるものとする。この下位型は,非一様な b_spline_curve を表現するために用いるが,他の knot_type の

ために用いてもよい。

L

をノットリストの dk+2 個のノットの中の相異なる値の個数とする。は,

“ノットに対する添字の

上限 (upper_index_on_knots) ”として参照される。m

j

を,相異なるノットの 番目の値の多重度(すなわ

ち,反復の数)とする。

したがって

2

1

k

d

m

L

i

i

å

となる。

すべてのノット多重度は,最初のもの及び最後のものを除き,1∼の範囲になければならない。最初の

もの及び最後のものは,最大で d+1 をとることができる。

基底関数の値を求める場合,例えば,多重度 3 のノット は,ノット配列における並び uuとして解

釈される。


39

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS による定義

*)

ENTITY b_spline_curve_with_knots

   SUBTYPE  OF  (b_spline_curve);

   knot_multiplicities : LIST [2:?]OF INTEGER;

   knots :  LIST  [2:?]OF  parameter_value;

   knot_spec

: knot_type;

DERIVE

   upper_index_on_knots : INTEGER := SIZEOF(knots);

WHERE

   WR1:  constraints_param_b_spline(degree,  upper_index_on_knots,

                            upper_index_on_control_points,

                            knot_multiplicities,  knots);

   WR2:  SIZEOF(knot_multiplicities)  =  upper_index_on_knots;

END_ENTITY;

(*

属性定義

knot_multiplicities

:ノットの多重度。このリストは,ノットの配列を構築する際にリスト knots 中の各ノッ

トが繰り返される回数を定義する。

knots

:B-スプライン基底関数を定義するために使用される相異なるノットのリスト。

knot_spec

:ノットの種類の記述。これは,参考とする。

SELF

\b_spline_curve.curve_form:特定の曲線形状の識別子。これは,参考とする(詳細は,4.3.4 参照)。

SELF

\b_spline_curve.degree:基底関数の代数的な次数。

SELF

\b_spline_curve.closed_curve:曲線が閉であるかどうかの表示。これは,参考とする。

SELF

\b_spline_curve.self_intersect:曲線が自己干渉するかどうかを示すフラグ。これは,参考とする。

dim

:曲線の座標空間の次元数。

SELF

\b_spline_curve.upper_index_on_control_points:制御点の配列の添字の上限。添字の下限は,0 とする。

この値は,control_points_list から導出される。

upper_index_on_knots

:ノットの配列の添字の上限。添字の下限は,1 とする。

SELF

\b_spline_curve.control_points:曲線の幾何を定義するために使われる制御点の配列。これは,

control_points_list

から導出される。

備考  データの一部が“参考”として記述されている属性値と曲線自身から得られる特性とが一

致しない場合,曲線データが優先される。

形式的要件

WR1:B-スプラインのパラメタ化において矛盾が見いだせない場合,constraints_param_b_spline は,TRUE

を返す。

WR2:ノット多重度のリスト中の要素の個数は,ノットのリスト中の要素の個数と等しくなければならな

い。

4.4.30  uniform_curve  これは,b_spline_curve の特殊な下位型とし,ノットが等間隔に配置されたものと

する。この場合,ノット及びノット多重度に対して,適切な暗黙値が導出される。


40

B 3700-42:1996 (ISO 10303-42:1994)

B-

スプラインが一様であるとは,すべてのノット多重度が 1 で、すべてのノットが直前のノットとある

正の定数だけ異なることをいう。この下位型では,ノットは,−から始まり,間隔は 1.0 とする。ここで,

d

は次数とする。

備考  b_spline_curve が,一様でかつ degree=1 の場合,polyline と等価とする。

EXPRESS による定義

*)

ENTITY uniform curve

   SUBTYPE  OF  (b_spline_curve);

END_ENTITY;

(*

備考  値 k_up は,ノット及びノット多重度のリストの添字の上限に必要なことがある。これは,

次数及び制御点の個数から計算される。

k_up=SELF

\b_spline_curve.upper_index_on_control_points+degree+2

必要ならば,ノット及びノット多重度は,次の関数呼び出しによって計算することがで

きる。

default_b_spline_knots(SELF

\b_spline_curve.degree, k_up, uniform_knots)

default_b_spline_knot_mult(SELF

\b_spline_curve.degree, k_up, uniform_knots)

4.4.31  quasi_uniform_curve  これは,b_spline_curve の特殊な下位型とし,最初のもの及び最後のものを

除き,ノットは,等間隔に配置され,多重度 1 をもつ。この場合,ノット及びノット多重度に対して,適

切な暗黙値が導出される。

B-

スプラインが準一様であるとは,ノットが端点では多重度 (degree+1) を,それ以外では多重度 1 をも

ち,各ノットが直前のノットから,ある正の定数だけ異なることをいう。2 個のノットだけをもつ

quasi_uniform_curve

は,ベジエ曲線を表現する。この下位型では,ノットは,0.0 から始まり,その間隔は

1.0

とする。

EXPRESS による定義

*)

ENTITY quasi_uniform_curve

   SUBTYPE  OF  (b_spline_curve);

END_ENTITY;

(*

備考  値 k_up は,ノット及びノット多重度のリストの添字の上限に必要なことがある。これは,

次数及び制御点の個数から計算される。

k_up=SELF

\b_spline_curve.upper_index_on_control_points_degree+2

必要ならば,ノット及びノット多重度は,次の関数呼び出しによって計算することがで

きる。

default_b_spline_knots(SELF

\b_spline_curve.degree, k_up, quasi_uniform_knots)

default_b_spline_knot_mult(SELF

\b_spline_curve.degree, k_up, quasi_uniform_knots)

4.4.32  bezier_curve  この下位型は,最も一般的な場合,区分的ベジエ曲線を表す。これは,b_spline_surface

の特殊な下位型とし,ノットが等間隔で,高い多重度をもつものとする。この場合,ノット及びノット多

重度に対して,適切な暗黙値が導出される。


41

B 3700-42:1996 (ISO 10303-42:1994)

b_spline_curve

は,内部ノットの多重度が 1 ではなく degree であることを除いて準一様ならば,区分的

ベジエ曲線とする。この下位型では,ノットは 0.0 から始まり,その間隔は 1.0 とする。2 個のノット 0.0

及び 1.0 だけをもち,それぞれの多重度が(次数+1)の区分的ベジエ曲線は,単純なベジエ曲線とする。

備考1.  単純なベジエ曲線は,次のデータによって,ノットをもった b_spline_curve として定義

できる。

次数

d

制御点の添字の上限

に等しい)

制御点

d+1 個の cartesian_point)

ノット列の種類

(準一様ノットに等しい)

ノット多重度

d+1,d+1)

ノット

(0.0,1.0)

有理ベジエ曲線を除いて,これ以外のデータは不要とする。有理ベジエ曲線の場合,

重みのデータ[  (d+1)  個の実数]が与えられなければならない。

2.  区分的ベジエ曲線は,b_spline_curve としての等価な表現をもつ。非一様なノットの問題

のため,b_spline_curve の中には,区分的ベジエ曲線として表現できないものも存在する。

区分的ベジエ曲線を B-スプラインとして定義するためには,次のとおりとする。

−  最初のノットは 0.0 とし,多重度は(d+1)とする。

−  次のノットは 1.0 とし,それか最後でなければ,多重度は とする(1 番目のセグメ

ントに対するノットの定義。

−  その次のノットは 2.0 とし,それが最後でなければ,多重度は,とする(2 個のセ

グメントに対するノットの定義。

−  これを最後のセグメントの終点まで続ける。最後のセグメントが 番目のとき,そ

の終点のノットを とし,多重度は(d1)とする。

例 6.  1 個のセグメントからなる 3 次のベジエ曲線は,多重度列(4,4)のノット列(0,1)

をもつことになる。

例 7.  2 個のセグメントからなる 3 次の区分的ベジエ曲線は,多重度列(4,3,4)のノッ

ト列(0,1,2)をもつことになる。

3.  区分的ベジエの場合は,を次数,k+1 を制御点の個数,を多重度 のノットの個数,

及び をスプラインのノットの総数とすると,次のとおりになる。

(d

+2+k)=N

=(d

1)+md+(d1)

したがって,

m=(k

d)/d

である。ノット列は (0,1,…,m,(m+1))  で,多重度列  (d1,d,…,d,d1)  をもつ。

EXPRESS による定義

*)

ENTITY bezier curve

   SUBTYPE  OF  (b_spline_curve);

END_ENTITY;

(*


42

B 3700-42:1996 (ISO 10303-42:1994)

備考  値 k_up は,ノット及びノット多重度のリストの添字の上限に必要なことがある。これは,

次数及び制御点の個数から計算される。

1

.

_

_

int

_

_

_

_

.

_

_

_

degerr

curve

spline

b

SELF

s

po

control

on

index

upper

curve

spline

b

SELF

up

k

必要ならば,ノット及びノット多重度は,次の関数呼び出しによって計算することがで

きる。

default_b_spline_knots(SELF

\b_spline_curve.degree, k_up, piecewise_bezier_knots)

default_b_spline_knot_mult(SELF

\b_spline_curve.degree, k_up, piecewise_bezier_knots)

4.4.33  rational_b_spline_curve  rational_b_spline_curve は,制御点及び基底関数によって記述された区分

的パラメタ有理曲線とする。この下位型は,b_spline_curve の他の下位型の一つ(これは,基底関数を定義

するためのノットの値を,明示的に又は暗黙に与える。

)とともにインスタンス化される。

重みは,すべて正でなければならない。更に,曲線は,次で与えられる。

å

å

k

i

d

i

i

k

i

d

i

i

i

u

N

w

u

N

w

u

0

0

)

(

)

(

)

(

P

λ

ここで,

k+1=

制御点の個数

P

i

=

制御点

w

i

=

重み

d=

次数

とする。

EXPRESS による定義

*)

ENTITY rational_b_spline_curve

   SUBTYPE  OF  (b_spline_curve);

   weights_data : LIST [2:?]OF REAL;

DERIVE

   weights              :  ARRAY  [0:upper_index_on_control_points]OF  REAL

                                  :=  list_to_array(weights_data,0,

                                       upper_index_on_control_points);

WHERE

  WR1: SIZEOF(weights_data) = SIZEOF(SELF

\b_spline_curve.control_points_list);

  WR2:  curve_weights_positive(SELF);

END_ENTITY;

(*

属性定義

weights_data

:与えられた重み。誘導属性の weights を参照。

SELF

\b_spline_curve.degree:基底関数の代数的次数。

SELF

\b_spline_curve.curve_form:特定の曲線形状の識別子。これは,参考とする(詳細は,4.3.4 参照)。


43

B 3700-42:1996 (ISO 10303-42:1994)

SELF

\b_spline_curve.closed_curve:曲線が閉じているかどうかの表示。これは,参考とする。

SELF

\b_spline_curve.self_intersect:曲線が自己干渉するかどうかを示すフラグ。これは,参考とする。

SELF

\b_spline_curve.upper_index_on_control_points:制御点の配列の添字の上限。添字の下限は,0 とする。

この値は,control_points_list から導出される。

SELF

\b_spline_curve.control_points:曲線の幾何を定義するために使われる制御点の配列。これは,

control_points_list

から導出される。

weights

:制御点に関連付けられた重みの配列。これは,weights_data から導出される。

備考  データの一部が“参考”として記述されている属性値と曲線自身から得られる特性とが一

致しない場合,曲線データが優先される。

形式的要件

WR1:重みの個数と制御点の個数とは,同じでなければならない。 
WR2:すべての重みは,0.0 を超えなければならない。

4.4.34  trimmed_curve  trimmed_curve は,関連付けられた basis_curve から,2 個の識別された点の間を選

択することによって生成される bounded_curve とする。basis_curve 自体は不変であって,2 個以上の

trimmed_curve

が同じ基底曲線を参照してもよい。曲線に対するトリム点は,次によって識別できる。

−  パラメタ値

−  幾何的位置

−  その両者

これらのうちの少なくとも一つは,曲線の各端点で明記されなければならない。sense によって,円のよ

うな閉曲線のあらゆる区間を明確に定義できる。向き及び順序付けられた端点の組合せによって,円又は

他の閉曲線上の異なる 2 点を結ぶ,向きのある 4 個の別々の区間が定義できる。この目的のために,パラ

メタ範囲の循環的な特性が仮定される。例えば,370°は,10°と等価とする。

trimmed_curve

のパラメタ化は,参照される特定の basis_curve のパラメタ化から継承される。より正確

には,trimmed_curve のパラメタ は,basis_curve のパラメタ から次のとおり得られる。

向きが TRUE の場合は,s=tt

1

向きが FALSE の場合は,s=t

2

t

上の式において,t

1

は,パラメタ 1 で与えられる値又は点 1 に対応するパラメタの値とし,t

2

は,パラ

メタ 2 で与えられる値又は点 2 に対応するパラメタの値とする。この trimmed_curve では,パラメタ は,

0

から|t

2

t

1

|

までの値をとり,s=0 が第 1 のトリム点に対応し,s=|t

2

t

1

|

は第 2 のトリム点に対応する。

備考1. basis_curve が閉じている場合,向きフラグとの整合性のために,必要に応じて t

1

又は t

2

に basis_curve の一周のパラメタ値分だけ加えることもある。

2. (a) sense_agreement=TRUE,かつ t

2

t

1

の場合,t

2

に一周のパラメタ値を加える。

(b) sense_agreement=FALSE,かつ t

1

t

2

の場合,t

1

に一周のパラメタ値を加える。

参考  原国 際 規 格で は ,trim_1 ,trim_2 と 表記 さ れ てい るが , 曲 線の ト リ ム点 を 識別 す る

parameter_value

に対応しているので,パラメタ 1,パラメタ 2 とした。幾何位置には,点 1,

点 2 が対応する。

EXPRESS による定義

*)

ENTITY trimmed_curve

   SUBTYPE  OF  (bounded_curve);


44

B 3700-42:1996 (ISO 10303-42:1994)

   basis_curve         :  curve;

   trim_1        

:  SET[1:2]OF  trimming_select;

   trim_2        

:  SET[1:2]OF  trimming_select;

   sense_agreement    :  BOOLEAN;

   master_representation

:  trimming_preference;

WHERE

   WR1: (HIINDEX(trim_1) = 1) XOR (TYPEOF(trim_1[1]) <>TYPEOF(trim_1[2]));

   WR2: (HIINDEX(trim_2) = 1) XOR (TYPEOF(trim_2[1]) <>TYPEOF(trim_2[2]));

END_ENTITY;

(*

属性定義

basis_curve

:トリムされる curve。多重表現をもつ曲線に対して,trim_1 又は trim_2 として与えられた任意

の parameter_value は,basis_curve の master_representation だけを参照する。

trim_1

:第 1 のトリム点。cartesian_point(点 1)として,実数の parameter_value(パラメタ 1=t

1

)として,

又はそれらの両方として特定することができる。

trim_2

:第 2 のトリム点。cartesian_point(点 2)として,実数の parameter_value(パラメタ 2=t

2

)として,

又はそれらの両方として特定することができる。

sense_agreement

:trimmed_curve の方向が,basis_curve の方向と一致するか,又は反対であるかを表示する

ためのフラグ。

− sense_agreement=TRUE となるのは,パラメタの値が増加する方向に曲線を通過する場合。

− sense_agreement=FALSE となるのは,それ以外の場合とする。開曲線に対しては,t

1

t

2

ならば,

sense_agreement=FALSE

とする。t

2

t

1

ならば,sense_agreement に TRUE とする。向きの情報は,開

曲線の場合は冗長となるが,閉曲線に対しては本質的な情報となる。

master_representation

:曲線の端点において,パラメタ及び点の双方がある場合,これは優先形式を示す。

多重表現によって,データが幾何的に同一であることが期待されている場合であっても,複数の形式でデ

ータを交換することが可能になる(4.3.8 参照)。

備考  属性 master_representation は,多重形式の同一性を保証することが実用的でないので,優先

形式の表示を許す。これは,データの作成者によって決定される。多重表現をもつエンテ

ィ テ ィ に 対 し て , パ ラ メ タ 化 , 定 義 域 , 評 価 の 結 果 な ど の す べ て の 特 性 は ,

master_representation

から得られる。他の表現の使用は,実用性への配慮による。

形式的要件

WR1:1 個の値が trim_1 に対して定義されるか,又は 2 個のトリムの値が異なる型(cartesian_point 及び

parameter_value

)であるかのいずれかとする。

WR2:1 個の値が trim_2 に対して定義されるか,又は 2 個のトリムの値が異なる型(cartesian_point 及び

parameter_value

)であるかのいずれかとする。

非形式的要件

IP1:trim_1 又は trim_2 に対して,parameter_value 及び cartesian_point の両方が存在する場合,それらは一

致して いな けれ ばな らな い。す なわ ち,parameter_value で評 価さ れた basis_curve は, 指定 され た

cartesian_point

と一致していなければならない。

IP2:cartesian_point が trim_1 又は trim_2 によって指定される場合,それは basis_curve 上になければならな


45

B 3700-42:1996 (ISO 10303-42:1994)

い。

IP3:パラメタ 1 及びパラメタ 2 の両方が存在する閉じた basis_curve の場合を除き,向きのフラグに矛盾

があってはならない。すなわち,sense_agreement は,パラメタ 1<パラメタ 2 の評価値と等しい。

IP4:パラメタ 1 及びパラメタ 2 の両方が存在する場合,パラメタ 1 とパラメタ 2 は,等しくない。

IP5:parameter_value が trim_1 又は trim_2 によって指定される場合,それは,basis_curve のパラメタ範囲

内になければならない。

4.4.35  composite_curve  composite_curve は,端点と端点とが結合されている曲線の集まりとする。曲線

の個々のセグメントは,それ自身 composite_curve_segment として定義される。composite_curve のパラメタ

化は,参照される bounded_curve のパラメタ範囲の累算とする。第 1 セグメントは 0 から l

1

までパラメタ

化され,i≧2 に対する 番目のセグメントは次のとおりにパラメタ化される。

å

1

0

i

k

k

l

から

å

i

k

k

l

0

まで。

ここで,l

k

は,番目のセグメントとなる曲線のパラメタの長さ(パラメタ値の最大値と最小値との差)と

す る 。 は , composite_curve の た め の パ ラ メ タ を 表 現 す る 。 し た が っ て , 番 目 の セ グ メ ン ト が

reparametarized_composite_curve_segment

でない場合,は,番目のセグメントに対するパラメタ t

i

t

i0

t

i

t

i1

)に,次の式で関係付けられる。

segments[i].samesense=TRUE

の場合,

å

1

1

0

i

k

i

i

k

t

t

l

T

とし,segments[i].samesense=FALSE の場合,

å

1

1

1

i

k

i

i

k

t

t

l

T

とする。

segments[i]

が reparametarized_composite_curve_segment の一種の場合は,

å

1

1

i

k

k

l

T

τ

とする。ここで

τは,4.4.37 で定義する。

EXPRESS による定義

*)

ENTITY composite_curve

   SUBTYPE  OF  (bounded_curve);

   segments  : LIST [1:?] OF composite_curve_segment;

   self_intersect

:  LOGICAL;

DERIVE

   n_segments  :  INTEGER  :=  SIZEOF(segments);

   closed_curve

:  LOGICAL;


46

B 3700-42:1996 (ISO 10303-42:1994)

              :=  segments[n_segments].transition  <>  discontinuous;

WHERW

   WR1: ((NOT closed_curve) AND (SIZEOF(QUERY(temp <* segments |

                temp.transition  =  discontinuous))  =  1))  OR

        ((closed_curve)  AND  (SIZEOF(QUERY(temp  <*  segments  |

            temp.transition  =  discontinuous))  =  0));

END_ENTITY;

(*

属性定義

n_segments

:構成要素の曲線の個数。

segments

:構成要素の bounded_curve 並びにそれらの遷移及び向き。最後のセグメントに対する属性

transition

は,最後のセグメントの終点と最初のセグメントの始点との間の遷移を定義する。この属性

transition

は,値 discontinuous をとることが許され,開曲線であることを示す(4.3.2 参照)。

self_intersect

:曲線が自己干渉するかどうかの表示。これは,参考とする。

dim

:composite_curve に対する座標空間の次元数。これは,上位型 geometric_representation_item から継承

された属性とする。

closed_curve

:曲線が閉じているかどうかの表示。これは,最後のセグメント上の transition から得られる。

備考  属性についての詳細な情報は,図 参照。

図 8  composite_curve

形式的要件

WR1:開曲線の最後を除いて,transition は,discontinuous であってはならない。

非形式的要件

IP1:各セグメントの属性 same_sense は,構成要素の曲線の向きを指定する。

same_sense

によって示された方向に通過するとき,セグメント同士は,端点において結合する。


47

B 3700-42:1996 (ISO 10303-42:1994)

4.4.36  composite_curve_segment   composite_curve_segment は , composite_curve を 構 成 す る た め の

bounded_curve

とし,遷移情報をもつ。

EXPRESS による定義

*)

ENTITY composite_curve_segment;

   transition  :  transition_code;

   same_sense  :  BOOLEAN;

   parent_curve

:  curve;

INVERSE

   using_curves

: BAG[1:?] OF composite_curve FOR segments;

WHERE

   WR1:  ('GEOMETRY_SCHEMA.BOUNDED_CURVE'  IN  TYPEOF(parent_curve));

END_ENTITY;

(*

属性定義

transition

:composite_curve における遷移の状態(このセグメントの最後の点と次のセグメントの最初の点

との幾何的連続性)。

same_sense

:セグメントの向きが,parent_curve の向きと一致しているか反対であるかの表示。same_sense

が FALSE の場合,パラメタの値が大きい方の端点を,セグメントの最初の点とする。

parent_curve

:セグメントの幾何を定義する bounded_curve。

using_curves

:この composite_curve_segment をセグメントとして用いる composite_curve の集合。この集合

は,空であってはならない。

形式的要件

WR1:parent_curve は,bounded_curve でなければならない。 
4.4.37  reparametrised_composite_curve_segment 

reparametarized_composite_curve_segment

composite_curve_segment

の特殊な下位型とし,その幾何を変更することなくパラメタの長さを再定義する

ことができる。

param_length

を とおく。

t

0

tt

1

が parent_curve のパラメタ範囲である場合,reparametarized_composite_curve_segment のための新

しいパラメタ

τは,次の式で与えられる。

same_sense=TRUE

の場合,

l

t

t

t

t

0

1

0

τ

とし,same_sense=FALSE の場合,

l

t

t

t

t

0

1

1

τ

とする。

EXPRESS による定義

*)

ENTITY reparametrised_composite_curve_segment


48

B 3700-42:1996 (ISO 10303-42:1994)

   SUBTYPE  OF  (composite_curve_segment);

   param_length  :  parameter_value;

WHERE

   WR1:  param_length  >  0.0;

END_ENTITY;

(*

属性定義

param_length

:セグメントの新しいパラメタの長さ。

セグメントには,

単純な線形のパラメタ化が与えられ,

最初の点においては 0.0 となり,最後の点においては,param_length となる。このセグメントを用いて構成

される composite_curve のパラメタ化は,param_length によって定義される。

形式的要件

WR1:param_length は,0 を超えなければならない。 
4.4.38  pcurve  pcurve は,曲面のパラメタ空間における 2 次元曲線によって定義される 3 次元曲線とする。

曲線が関数  (u,

υ)=f(t)  によってパラメタ化される場合及び曲面が関数  (x,y,z)=g(u,υ)  によってパラメタ化

される場合,pcurve は,関数  (x,y,z)=g(f(t))  によってパラメタ化される。pcurve の定義は,その basis_surface

への参照,及びエンティティ definitional_representation を通じての 2 次元曲線への間接的な参照を含む。こ

の 2 次元曲線は,パラメタ空間内にあるので basis_surface のコンテキストにはない。したがって,直接的

な参照は,不可能である。この 2 次元曲線において関係する変数は,basis_surface のパラメタ表現の 

υであって,デカルト座標の 及び ではない。曲線は,曲面のパラメタ範囲内で定義される。

EXPRESS による定義

*)

ENTITY pcurve

   SUBTYPE  OF  (curve);

   basis_surface

:  surface;

   reference_to_curve :  definitional_representation;

WHERE

   WR1:  SIZEOF(reference_to_curve

\representation.items) = 1;

   WR2:  'GEOMETRY_SCHEMA.CURVE'  IN  TYPEOF

             (reference_to_curve

\representation.items[1]);

   WR3:  reference_to_curve

\representation.items[1]\

geometric_representation_item.dim = 2;

END_ENTITY;

(*

属性定義

basis_surface

:曲線がそのパラメタ空間内において定義されている曲面。

reference_to_curve

:pcurve を定義するパラメタ空間の曲線への参照。

形式的要件

WR1:reference_to_curve に対応するエンティティ definitional_representation における要素の集合は,ちょう

ど 1 個の要素をもつ。

WR2:集合の要素は,曲線とする。


49

B 3700-42:1996 (ISO 10303-42:1994)

WR3:この曲線の次元数は,2 とする。

4.4.39  bounded_pcurve  bounded_pcurve は,pcurve の特殊な下位型とし,bounded_curve の特性をもつ。 
EXPRESS による定義

*)

ENTITY bounded_pcurve

   SUBTYPE  OF  (pcurve,  bounded_curve);

WHERE

 WR1: ('GEOMETRY_SCHEMA.BOUNDED_CURVE' IN

             TYPEOF(SELF

\pcurve.reference_to_curve\representation.items[1]));

END_ENTITY;

(*

形式的要件

WR1:上位型 pcurve が参照する曲線は,bounded_curve でなければならない。これによって,bounded_pcurve

の弧長も有限となる。

4.4.40  surface_curve  surface_curve は,曲面上の曲線とする。この曲線は,3 次元空間の曲線(curve_3d)

として表現される。場合によって pcurve に対応した,曲面の 2 次元パラメタ空間の曲線としても表現され

る。1 個又は 2 個の pcurve_or_surface のリストを参照できるので,このエンティティは,単一の曲面上の

曲線か,二つの相異なる曲面か関係する交差のいずれかを定義できる。閉曲面上の“継ぎ目 (seam) ”も,

このエンティティによって表現できる。この場合,各 associated_geometry は,同じ曲面上にある pcurve と

なる。各 pcurve は,それが存在すれば,curve_3d と同じ向きをもつようにパラメタ化されなければならな

い。surface_curve のパラメタ化は,属性 master_representation に応じて curve_3d 又は pcurve から直接得ら

れる。

備考  下位型 bounded_surface_curve との ANDOR 関係から surface_curve のインスタンスは,次の

いずれになってもよい。

− surface_curve

− bounded_surface_curve

− intersection_curve

− intersection_curve

AND

bounded_surface_curve

− seam_curve

− seam_curve

AND

bounded_surface_curve

EXPRESS による定義

*)

ENTITY surface_curve

   SUPERTYPE  OF  (ONEOF(intersection_curve

,seam_curve) ANDOR

                                             bounded_surface_curve)

   SUBTYPE  OF  (curve);

   curve_3d  

:  curve;

   associated_geometry

:  LIST[1:2]  OF  pcurve_or_surface;

   master_representation

:  preferred_surface_curve_representation;

DERIVE


50

B 3700-42:1996 (ISO 10303-42:1994)

   basis_surface       :  surface

                 

:=  associated_surface(associated_geometry[1]);

WHERE

   WR1:  curve_3d.dim  =  3;

   WR2: 'GEOMETRY_SCHEMA.PCURVE' IN TYPEOF(associated_geometry[1]) OR

                        (master_representation  <>  pcurve_s1);

   WR3: 'GEOMETRY_SCHEMA.PCURVE' IN TYPEOF(associated_geometry[2]) OR

                        (master_representation  <>  pcurve_s2);

   WR4: NOT ('GEOMETRY_SCHEMA.PCURVE' IN TYPEOF(curve_3d));

END_ENTITY;

(*

属性定義

curve_3d

:surface_curve の 3 次元の表現である曲線。

associated_geometry

: surface_curve に 関 連 付 け ら れ る 1 個 又 は 複 数 の 曲 面 を 定 義 す る 1 ∼ 2 個 の

pcurve_or_surface

のリスト。このリストに要素が 2 個あることは,曲線に 2 個の曲面が関連付けられるこ

とを示すが,これらの曲線は,相異なる必要はない。pcurve が選択されたとき,それは曲面を識別し,更

にこの曲面のパラメタ空間における曲線も関連付ける。

master_representation

:“優先された”表現の表示。master_representation は,surface_curve の一意なパラメ

タ化を決定するための曲線を定義する。master_representation は,associated_geometry のリストの中で,3

次元曲線又は第 1 若しくは第 2 の pcurve の選択を示すために,それぞれ curve_3d,pcurve_s1 又は pcurve_s2

のうちの 1 個の値をとる。多重表現によって,データが幾何的に全く同一であることが期待されている場

合であっても,複数の形式でデータを交換することが可能となる。

備考  属性 master_representation は,多重形式の同一性を保証することが実用的ではないので,優

先形式の表示を許す。これは,データの作成者によって決定される。多重表現をもつエン

テ ィ テ ィ に 対 し て , パ ラ メ タ 化 , 定 義 域 , 評 価 の 結 果 な ど の す べ て の 特 性 は ,

master_representation

から得られる。他の表現の使用は,実用性への配慮による。

basis_surface

:surface_curve がのっている曲面。これは,associated_geometry のリストの第 1 要素から決定

される。

形式的要件

WR1:curve_3d は,3 次元空間で定義される。 
WR2:pcurve_s1 は,associated_geometry のリストの第 1 要素が pcurve の場合に限り,master_representation

として選択される。

WR3:pcurve_s2 は,associated_geometry のリストの第 2 要素が pcurve の場合に限り,master_representation

として選択される。

このことは,

associated_geometry

のリストが 1 個の要素しか含まない場合には,

pcurve_s2

が選択できないことを示す。

WR4:curve_3d は,pcurve であってはならない。

非形式的要件

IP1:curve_3d 及び 1 個以上の pcurve が存在する場合,それらは,数学的には同じ点集合を表現しなけれ

ばならない(すなわち,それらはパラメタ化では異なることが許されるが,幾何的には一致することが必

要となる。)。


51

B 3700-42:1996 (ISO 10303-42:1994)

IP2:curve_3d 及び任意の関連する pcurve は,それらの向きに関しては一致する。

4.4.41  intersection_curve  intersection_curve は,2 個の曲面の交差から生じる曲線とする。これは,エン

ティティ surface_curve の特殊な下位型として表現され,リスト associated_geometry によって定義された 2

個の相異なる曲面が関連付けられる。

EXPRESS による定義

*)

ENTITY intersection_curve

   SUBTYPE  OF  (surface_curve);

WHERE

   WR1:  SIZEOF(SELF

\surface_curve.associated_geometry) = 2;

   WR2:  associated_surface(SELF

\surface_curve.associated_geometry[1]) <>

        associated_surface(SELF

\surface_curve.associated_geometry[2]);

END_ENTITY;

(*

形式的要件

WR1:intersection_curve は,associated_geometry の要素をちょうど 2 個もつ。 
WR2:この 2 個の要素は,異なる曲面に関連付けられる。それらは,intersection_curve を定義する曲面と

する。

4.4.42  seam_curve  seam_curve は,閉じたパラメタ曲面上の曲線とし,曲面に対するパラメタ範囲の両端

におけるパラメタが一定の曲線として,2 個の異なる表現をもつ。例えば円柱上の“継ぎ目 (seam) ”は,

パラメタ空間において,u=0°又は u=360°の直線としての表現をもつ。

EXPRESS による定義

*)

ENTITY seam_curve

   SUBTYPE  OF  (surface_curve);

WHERE

   WR1:  SIZEOF(SELF

\surface_curve.associated_geometry) = 2;

   WR2:  associated_surface(SELF

\surface_curve.associated_geometry[1]) =

               associated_surface(SELF

\surface_curve.associated_geometry[2]);

   WR3:  'GEOMETRY_SCHEMA.PCURVE'  IN

          TYPEOF(SELF

\surface_curve.associated_geometry[1]);

   WR4:  'GEOMETRY_SCHEMA.PCURVE'  IN

          TYPEOF(SELF

\surface_curve.associated_geometry[2]);

END_ENTITY;

(*

形式的要件

WR1:seam_curve は,associated_geometry の要素をちょうど 2 個もつ。 
WR2:2 個の associated_geometry の要素は,同じ曲面に関係付けられる。 
WR3:associated_geometry の第 1 の要素は,pcurve とする。

WR4:associated_geometry の第 2 の要素は,pcurve とする。


52

B 3700-42:1996 (ISO 10303-42:1994)

4.4.43  bounded_surface_curve   bounded_surface_curve は , surface_curve の 特 殊 な 下 位 型 と し ,

bounded_curve

の特性をもつ。

EXPRESS による定義

*)

ENTITY bounded_surface_curve

   SUBTYPE  OF  (surface_curve,  bounded_curve);

WHERE

   WR1:  ('GEOMETRY_SCHEMA.BOUNDED-CURVE'  IN

          TYPEOF(SELF

\surface_curve.curve_3d));

END_ENTITY;

(*

形式的要件

WR1:上位型 surface_curve の属性 curve_3d は,bounded_curve でなければならない。 
4.4.44  composite_curve_on_surface  composite_curve_on_surface は,curve_on_surface であるセグメントを

集めたものとする。各セグメントは,basis_surface 上にあることか必要で,次のいずれかとする。

− surface_curve

− intersection_curve

− composite_curve_on_surface

備考  composite_curve_on_surface は,bounded_curve の下位型であるので,composite_curve_segment

の属性 parent_curve として含まれることを可能にする。

隣接するセグメント間には,

少なくとも位置的な連続性を必要とする。

composite_curve

のパラメタ化は,

セグメントのパラメタ範囲の累算から得られる。第 1 セグメントは,0 から l

1

までパラメタ化され,i≧2

に対する 番目のセグメントは,次のとおりにパラメタ化される。

å

1

0

i

k

k

l

から

å

i

k

k

l

0

まで。

ここで,l

k

は,番目の曲線セグメントのパラメタの長さ(パラメタ値の最大値と最小値との差)とする。

EXPRESS による定義

*)

ENTITY composite_curve_on_surface

   SUPERTYPE  OF  (boundary_curve)

   SUBTYPE  OF  (composite_curve);

DERIVE

   basis_surface : SET[0:2] OF surface :=

                get_basis_surface(SELF);

WHERE

   WR1:  SIZEOF(basis_surface)  >  0;

   WR2:  constraints_composite_curve_on_surface(SELF);

END_ENTITY;

(*


53

B 3700-42:1996 (ISO 10303-42:1994)

属性定義

basis_surface

:composite_curve がのっている曲面。

SELF

\composite_curve.n_segments:構成要素の曲線の個数。

SELF

\composite_curve-segments:構成要素の bounded_curve,それらの遷移及び向き。最後のセグメント

に対する遷移は,最後のセグメントの終点と最初のセグメントの始点との間の遷移を定義する。この要素

は,値 discontinuous をとることが許され,それは開曲線を示す(4.3.2 参照)。

SELF

\composite_curve.self_intersect:曲線が自己干渉するかどうかの表示。

SELF

\composite_curve.dim:composite_curve に対する座標空間の次元数。

SELF

\composite_curve.closed_curve:曲線が閉じているかどうかの表示。

形式的要件

WR1:集合 basis_surface は,少なくとも一つの曲面を含まなければならない。これによって,すべてのセ

グメントが,同じ曲面の上の曲線を参照できる。

WR2:各セグメントは,pcurve,surface_curve 又は composite_surface_on_curve を参照する。

非形式的要件

IP1:セグメント composite_curve_on_surface によって参照される各 parent_curve は,curve_on_surface 又は

bounded_curve

とする。

4.4.45  offset_curve_2d  offset_curve_2d は,2 次元空間内において,基礎となる曲線(basis_curve)からの距

離が一定の曲線とする。basis_curve のある平面内において,basis_curve の法線に沿って distance だけオフ

セットすることによって,このエンティティは,単純な平面内オフセット曲線を定義する。

基礎と なる 曲線 は, その 上のす べて の点 にお いて ,適切 な接 線方 向を もた なけれ ばな らな い。

composite_curve

の 場 合 は , 各 セ グ メ ン ト 間 の transition_code は , cont_same_gradient 又 は

cont_same_gradient_same_curvature

とする。

備考  offset_curve_2d は,basis_curve と異なる curve であってもよい。自己干渉していない曲線の

オフセットは,自己干渉する可能性がある。連続曲線のオフセットは,不連続にならない

ように注意しなければならない。

offset_curve_2d

は,そのパラメタ化を basis_curve から得る。offset_curve_2d は,次のとおりパラメタ化さ

れる。

λ(u)=C(u)+d(orthogonal_complement(T))

ここで,はパラメタ値 における basis_curve  C(u)への単位接ベクトルとし,は distance とする。基礎

となる曲線は,2 次元とする。

EXPRESS による定義

*)

ENTITY offset_curve_2d

   SUBTYPE  OF  (curve);

   basis_curve

:  curve;

   distance     :  length_measure;

   self_intersect

:  LOGICAL;

WHERE

 WR1: basis_curve.dim = 2;

END_ENTITY;


54

B 3700-42:1996 (ISO 10303-42:1994)

(*

属性定義

basis_curve

:オフセットされる curve。

distance

:basis_curve からオフセット曲線への距離。distance は,正,負又は 0 であることが許される。distance

の正の値は,与えられた点における接ベクトル を反時計回りに 90°回転した向きで曲線と直交する方向

に,オフセットを定義する(これは,orthogonal_complement(T)の方向とする。)。

self_intersect

:オフセット曲線が自己干渉するかどうかの表示。これは,参考とする。

形式的要件

WR1:基礎となる曲線は,2 次元空間内で定義される。 
4.4.46  offset_curve_3d  offset_curve_3d は,3 次元空間内において,基礎となる曲線 (basis_curve) からの

距離が一定の曲線とする。

基礎となる曲線は,あらゆる点において,明確な接線方向をもたなければならない。composite_curve の

場合は,各セグメント間の transition_code は,cont_same_gradient 又は cont_same_gradient_same_curvature

とする。

basis_curve

上の任意の点(パラメタ)におけるオフセソト曲線は,V×の方向にある。ここで,は,

固定された参照方向とし,は,basis_curve への単位接線とする。オフセット方向が明確であるためには,

曲線の任意の点において,が と同じ又は反対の方向にあることが許されない。

備考  offset_curve_3d は,basis_curve と異なる curve であってもよい。自己干渉していない曲線の

オフセットが自己干渉する可能性がある。連続曲線のオフセットは,不連続にならないよ

うに注意しなければならない。

offset_curve_3d

は,そのパラメタ化を basis_curve から得る。offset_curve_3d は,次のとおりパラメタ化さ

れる。

λ(u)=C(u)+dV×T

ここで,はパラメタ値 における basis_curveC(u)への単位接ベクトルとし,は distance とする。

EXPRESS による定義

*)

ENTITY offset_curve_3d

   SUBTYPE  OF  (curve);

   basis_curve

:  curve;

   distance     :  length_measure;

   self_intersect

:  LOGICAL;

   ref_direction

:  direction;

WHERE

   WR1: (basis_curve.dim = 3) AND (ref_direction.dim = 3);

END_ENTITY;

(*

属性定義

basis_curve

:オフセットされる curve。

distance

:basis_curve からオフセット曲線への距離。distance は,正,負又は 0 であることが許される。

self_intersect

:オフセット曲線が自己干渉するかどうかの表示。これは,参考とする。


55

B 3700-42:1996 (ISO 10303-42:1994)

ref_direction

:basis_curve からオフセット曲線の方向を定義するために使われる direction。

形式的要件

WR1:基礎となる曲線及び参照方向は,ともに 3 次元空間内で定義される。

非形式的要件

IP1:曲線上のすべての点において,ref_direction が接ベクトルの方向と平行又は逆向きの平行であること

は許されない。

4.4.47  curve_replica  curve_replica は,異なる配置における曲線の複製(replica)とする。これは,

parent_curve

及び transformation を参照することによって定義される。生成される曲線の幾何形状は,

parent_curve

のものと同一となる。しかし,transformation が拡大・縮小を含む場合,大きさが異なること

になる。curve_replica は,そのパラメタ範囲及びパラメタ化を,直接 parent_curve から得る。parent_curve

が curve_on_surface の場合,一般的に,複製は,曲面上にあるという特性を共有しない。

EXPRESS による定義

*)

ENTITY curve_replica

   SUBTYPE  OF  (curve);

   parent_curve

:  curve;

   transformation

:  cartesian_transformation_operator;

WHERE

   WR1:  transformation.dim  =  parent_curve.dim;

   WR2:  acyclic_curve_replica(SELF

,parent_curve);

END_ENTITY;

(*

属性定義

parent_curve

:複製される曲線。

transformation

:curve_replica の配置を定義する cartesian_transformation_operator。この変換は,拡大・縮小

を含むことが許される。

形式的要件

WR1:属性 transformation の座標空間の次元数は,parent_curve のそれと等しくなければならない。 
WR2:curve_replica は,自身の定義に関係してはならない。 
4.4.48  surface  定義は,3.1 による。surface(曲面)は,3 次元空間における,局所的には 2 次元の連結

点集合と考えることができる。surface は,多様体でなくてもよい。surface は,単一の点,又は一部若しく

は全体が曲線であってはならない。

各 surface は,パラメタ表現の形式

σ(u,v)

をもつ。ここで,及び

υは,独立な無次元のパラメタとする。曲面上のすべての点において,単位法線ベ

クトル は,次の式で与えられる。

v

u

v

u

×

σ

σ

N

)

,

(

EXPRESS による定義

*)


56

B 3700-42:1996 (ISO 10303-42:1994)

ENTITY surface

   SUPERTYPE OF (ONEOF(elementary_surface, swept_surface, bounded_surface,

                       offset_surface,  surface_replica))

   SUBTYPE  OF  (geometric_representation_item);

END_ENTITY;

(*

非形式的要件

IP1:surface の面積は,0 ではない。 
IP2:surface は,弧状連結とする。

4.4.49  elementary_surface  elementary_surface は,パラメタ表現の定義をもつ単純な解析曲面とする。

EXPRESS による定義

*)

ENTITY elementary_surface

   SUPERTYPE OF (ONEOF(plane, cylindrical_surface, conical_surface,

                          spherical_surface,  toroidal_surface))

   SUBTYPE  OF  (surface);

   position  :  axis2_placement_3d;

END_ENTITY;

(*

属性定義

position

:elementary_surface の配置及び向き。この属性は,曲面のパラメタ化の定義に使用される。

4.4.50  plane  plane(平面)は,一定の法線をもった境界のない surface とする。plane は,plane 上の点及

び plane の法線の方向によって定義する。データは,次のとおり解釈される。

C=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]=plane

の法線

パラメタ化は,次のとおりとする。

σ(u,v)=Cxuyv

パラメタ範囲は,−∞<u

υ<∞とする。上のパラメタ化では,単位ベクトルの 及び の長さの単位は,

plane

のコンテキストから得られる。

EXPRESS による定義

*)

ENTITY plane

SUBTYPE OF (elementary_surface);

END_ENTITY;

(*

属性定義

SELF

\elementary_surface.position:surface の配置及び向き。この属性は,上位型の elementary_surface から

継承される。


57

B 3700-42:1996 (ISO 10303-42:1994)

SELF

\elementary_surface.position.location:plane 上の点。

SELF

\elementary_surface.position.p[3]:この direction は,SELF\elementary_surface.position.axis に等しく,

plane

の法線を定義する。

4.4.51  cylindrical_surface  cylindrical_surface(円柱面)は,直線から一定の距離 (radius) にある曲面とす

る。

cylindrical_surface

は,半径,向き及び配置から定義される。データは,次のとおり解釈される。

C=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]

R=radius

パラメタ化は,次のとおりとする。

σ(u,v)=CR(cosu)x+(sinu)y)+vz

ここで,パラメタ範囲は,0°≦u≦360°及び−∞<

υ<∞とする。上のパラメタ化では,単位ベクトル z

の長さの単位は,radius のものと等しい。

上で定義された配置座標系において,曲面は,式 S=0 で表現される。ここで,

S(x,y,z)=x

2

+y

2

−R

2

とする。曲面上のすべての点について,曲面の法線の正の方向は,次のとおり与えられる。

(S

x

,S

y

,S

x

)

単位法線ベクトルは,次の式から求まる。

N(u,v)=(cosu)x+(sinu)y

この法線の向きは,円柱の軸から離れる向きとなる。

EXPRESS による定義

*)

ENTITY

cylindrical_surface

   SUBTYPE  OF  (elementary_surface);

   radius  :  positive_length_measure;

END_ENTITY;

(*

属性定義

SELF

\elementary_surface.position:cylindrical_surface の配置及び向き。

SELF

\elementary_surface.position.location:cylindrical_surface の軸上の点。

SELF

\elementary_surface.position.p[3]:cylindrical_surface の軸の方向。

radius

:cylindrical_surface の半径。

4.4.52  conical_surface  conical_surface(円錐面)は,3 次元空間の直線を,それと交差する任意の直線の

回りで回転することによって生成される曲面とする。conical_surface は,半頂角,配置,及び向きと,円

錐の軸に垂直で配置点 を通る平面上における半径とによって定義される。

備考  この表現形式は,配置点 の近くで最大の幾何的精度を与えるように定められた。このた

め,頂点を配置点とするのは,頂点に近い領域か対象となるときに限った方がよい。


58

B 3700-42:1996 (ISO 10303-42:1994)

データは,次のとおり解釈される。

C=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]

R=radius

α=semi_angle

パラメタ化は,次のとおりとする。

σ(u,v)=C+(R+υtanα)((cosu)x+(sinu)y)+vz

ここで,パラメタ範囲は,0°≦u≦360°及び-∞<

υ<∞とする。上のパラメタ化では,単位ベクトル z

の長さの単位は,radius のものと等しい。

上で定義された配置座標系において,曲面は,式 S=0 で表現される。ここで,

S(x,y,z)=x

2

y

2

−(R+ztan

α)

2

とする。曲面上のすべての点において,曲面の法線の正の方向は,次のとおり与えられる。

(S

x

,S

y

,S

z

)

単位法線ベクトルは,次の式から求まる。

2

)

(tan

1

)

(tan

)

(sin

)

(cos

)

,

(

α

α

z

y

x

N

u

u

v

u

この法線の向きは,円錐の軸から離れる向きとなる。半径が 0 のときは,円錐の頂点は,配置座標系の点

(0,0,0)

(すなわち,SELF\elementary_surface.position.location)にあるとする。

EXPRESS による定義

*)

ENTITY

conical_surface

   SUBTYPE  OF  (elementary_surface);

   radius

:  length_measure;

   semi_angle  :  plane_angle_measure;

WHERE

   WR1:  radius  >=  0.0;

END_ENTITY;

(*

属性定義

SELF

\elementary_surface.position:surface の配置及び向き。

SELF

\elementary_surface.position.location:conical_surface の軸上の配置点。

SELF

\elementary_surface.position.p[3]:conical_surface の軸の方向。

radius

:配置点(すなわち,SELF\elementary_surface.position.location)を通り,conical_surface の軸に垂直

な平面と,この conical_surface との交線である円の半径。

semi_angle

:conical_surface の半頂角。

備考  属性の詳細は,図 参照。

形式的要件


59

B 3700-42:1996 (ISO 10303-42:1994)

WR1:半径は,負になってはならない。

非形式的要件

IP1:半頂角は,0°を超え 90°未満とする。

図 9  comical_surface

4.4.53  spherical_surface  spherical_surface(球面)は,中心点から一定の距離(radius)にある曲面とする。

spherical_surface

は,曲面の半径,配置及び向きから定義される。

データは,次のとおり解釈される。

C=position.location(中心)

x=position.p[1]

y=position.p[2]

z=position.p[3]

R=radius

パラメタ化は,次のとおりとする。

σ(u,v)=CRcosv((cosu)x+(sinu)y)+R(sinv)z

ここでパラメタ範囲は,0°≦u≦360°及び-90°≦

υ≦90°とする。

上で定義された配置座標系において,曲面は,式 S=0 で表現される。ここで,

S(x,y,z)=x

2

y

2

+z

2

−R

2

とする。曲面上のすべての点について,曲面の法線の正の方向は,次のとおり与えられる。

(S

x

,S

y

,S

z

)

単位法線ベクトルは,次の式から求まる。

N(u,v)=cosv((cosu)x+(sinu)y)+(sinv)z

すなわち,球の中心から離れる向きとなる。


60

B 3700-42:1996 (ISO 10303-42:1994)

EXPRIESS による定義

*)

ENTITY spherical_surface

   SUBTYPE  OF  (elementary_surface);

   radius   :  positive_length_measure;

END_ENTITY;

(*

属性定義

SELF

\elementary_surface.position:spherical_surface の配置及び向き。

SELF

\elementary_surface.position.location:球の中心。

radius

:spherical_surface の半径。

4.4.54  toroidal_surface  toroidal_surface(輪環面)は,円を,それと同平面の直線の回りで回転すること

によって生成される曲面とする。回転する円の半径を,ここでは minor_radius と呼び,major_radius は,円

の中心から回転軸までの距離とする。toroidal_surface は,major_radius 及び minor_radius と曲面の位置及び

向きとによって定義される。

データは,次のとおり解釈される。

C=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]

R=major_radius

r=minor_radius

パラメタ化は,次のとおりとする。

σ(u,v)=C+(Rrcosv)((cosu)x+(sinu)y)+r(sinv)z

ここで,パラメタ範囲は,0°≦u

υ≦360°とする。

  上で定義された配置座標系において,曲面は,式 S=0 で表現される。ここで,

S(x,y,z)=x

2

y

2

z

2

−2R

2

2

y

x

r

2

R

2

とする。曲面上のすべての点において,曲面の法線の正の方向は,次のとおり与えられる。

(S

x

,S

y

,S

z

)

単位法線ベクトルは,次の式から求まる。

N(u,v)=cosv((cosu)x+(sinu)y)+(sinv)z

この法線の向きは,半径が で中心が の円上で最も近い点から離れる向きとなる。major_radius が

minor_radius

よりも大きい場合,多様体曲面となる。それ以外の場合,曲面は,自己干渉する。

参考  原国際規格の表現では,法線の向きが寸理解しにくいが,次の参考図のように解釈すると

よい。


61

B 3700-42:1996 (ISO 10303-42:1994)

参考図  toroidal_surface の法線の向き

EXPRESS による定義

*)

ENTITY toroidal_surface

   SUBTYPE  OF  (elementary_surface);

   major_radius  :  positive_length_measure;

   minor_radius  :  positive_length_measure;

END_ENTITY;

(*

属性定義

SELF

\elementary_surface.position:toroidal_surface の配置及び向き。

SELF

\elementary_surface.position.location:輪環体の中心点。

major_radius

:輪環体の長半径。

minor_radius

:輪環体の短半径。

4.4.55  degenerate_toroidal_surface  degenerate_toroidal_surface は,toroidal_surface の特別な下位型とし,

minor_radius

が major_radius より大きい曲面とする。

この下位型においては,

多様体曲面を定義するために,

パラメタ範囲が制限される。この多様体曲面は,上位型によって定義される自己干渉する曲面の,内側の

“レモン形”をした部分,又は外側の“リンゴ形”をした部分のいずれかになる。

データは,次のとおり解釈される。

C=position.location

x=position.p[1]

y=position.p[2]

z=position.p[3]

R=major_radius

r=minor_radius

パラメタ化は,次のとおりとする。

σ(u,v)=C+(Rrcosv)((cosu)x+(sinu)y)+r(sinv)z


62

B 3700-42:1996 (ISO 10303-42:1994)

ここで,パラメタ範囲は,次のとおりとする。

select_outer=TRUE

のとき

0

°≦u≦360°

φ

v

φ

select_outer=FALSE

のとき

0

°≦u≦360°

φ

v≦360°−

φ

ここで

φは,rcosφ=-で与えられる角度(°)とする。

EXPRESS による定義

*)

ENTITY degenerate_toroidal_surface

   SUBTYPE  OF  (toroidal_surface);

   select_outer  :  BOOLEAN;

WHERE

   WR1:  major_radius  <  minor_radius;

END_ENTITY;

(*

属性定義

select_outer

:degenerate_toroidal_surface の二つの部分を区別するブール型のフラグ。select_outer が TRUE

のとき,曲面の外側部分が選ばれて,“リンゴ形”をした軸対称の閉曲面が定義される。select_outer が

FALSE

のとき,曲面の内側部分が選ばれて,“レモン形”をした軸対称の閉曲面が定義される。

形式的要件

WR1:major_radius は,minor_radius より小さい。 
4.4.56  swept_surface  swept_surface は,ある曲線を他の曲線に沿って掃引することによって作られる。

EXPRESS による定義

*)

ENTITY swept_surface

   SUPERTYPE  OF  (ONEOF(surface_of_linear_extrusion,  surface_of_revolution))

   SUBTYPE  OF  (surface);

   swept_curve  :  curve;

END_ENTITY;

(*

属性定義

swept_curve

:swept_surface を定義する際に掃引される curve。swept_curve が pcurve のとき,これは,その

pcurve

の 2 次元パラメタ空間内の曲線ではなく,掃引される 3 次元幾何空間内での curve の像とする。

4.4.57  surface_of_linear_extrusion  この曲面は,単純な swept_surface,すなわち,与えられた方向に曲線

を掃引して得られる一般化された柱状の曲面とする。パラメタ化は,次のとおりとする。ただし,曲線の

パラメタ化は,

λ(u)による。

V=extrusion_axis 
σ(u,v)=λ(u)+vV


63

B 3700-42:1996 (ISO 10303-42:1994)

υのパラメタ範囲は,-∞<υ<∞とし,のパラメタ範囲は,曲線のパラメタ化によって定義する。 
EXPRESS による定義

*)

ENTITY surface_of_linear_extrusion

   SUBTYPE  OF  (swept_surface);

   extrusion_axis      :  vector;

END_ENTITY;

(*

属性定義

extrusion_axis

:掃引の方向。このベクトルの大きさによって,パラメタ化が決まる。

SELF

\swept_surface.swept_curve:掃引される curve。

非形式的要件

IP1:surface_of_linear_extrusion は,自己干渉しない。 
4.4.58  surface_of_revolution  surface_of_revolution は,曲線をある軸の回りに 1 回転して得られる曲面と

する。

データは,次のとおり解釈される。

パラメタ化は,次のとおりとする。ただし,曲線のパラメタ化は,

λ(υ)による。

C=position.location

V=position.z

σ(u,υ)=C+(λ(v)−C)cosu+((λ(v)−C)・V)V(1−cosu)+V×(λ(v)−C)sinu

この曲線を 1 回転することによって得られる曲線が単一値曲面となるためには,を中心とし を軸とす

る円柱座標系  (r,

φ,z)  でその曲線を表した場合,曲線上のパラメタ値の異なる 2 点が同じ  (r,z)  をもっては

ならない。

備考  ここで,単一値曲面は,そのパラメタ範囲に対応するパラメタ空間内の長方形の内部から

幾何空間への,曲面の式によって定義される写像が,一対一対応である曲面とする。

surface_of_revolution

のパラメタ範囲は,0°≦u≦360°とする。

υのパラメタ範囲は,参照される曲線によって定義される。

備考  曲面の幾何形状は,曲線のパラメタ化に依存しない。

EXPRESS による定義

*)

ENTITY surface_of_revolution

   SUBTYPE  OF  (swept_surface);

   axis_position       :  axis1_placement;

DERIVE

   axis_line  :  line  :=  line(axis_position.location,

                     vector(axis_position.z,  1.0));

END_ENTITY;

(*

属性定義

axis_position

:回転軸上の点及び回転軸の方向。


64

B 3700-42:1996 (ISO 10303-42:1994)

SELF

\swept_surface.swept_curve:axis_line の回りに回転される curve。

axis_line

:回転軸に一致する line。

非形式的要件

IP1:surface_of_revolution は,自己干渉してはならない。 
IP2:swept_curve は,どの有限長さ部分においても,axis_line と一致してはならない。 
4.4.59  bounded_surface  bounded_surface は,同定可能な境界をもつ有限領域の曲面とする。

EXPRESS による定義

*)

ENTITY bounded_surface

   SUPERTYPE  OF  (ONEOF(b_spline_surface,  rectangular_trimmed_surface

                          curve_bounded_surface,  rectangular_composite_surface))

   SUBTYPE  OF  (surface);

END_ENTITY;

(*

非形式的要件

IP1:bounded_surface の面積は,0 でなくかつ有限とする。 
IP2:bounded_surface は,境界曲線をもつ。 
4.4.60  b_spline_surface  b_spline_surface(B-スプライン曲面)は,制御点,基底関数及び(場合によって

は)重みによって定義される有理式又は多項式の,パラメタ曲面の一般的な形式とする。このエンティテ

ィは,b_spline_curve と同様に,データの幾つかを導出できる特別な下位型をもつ。

備考1. b_spline_surface の暗黙値及び下位型の識別は,性能の考慮のために及び計算の実行にお

ける効率に関して重要である。

2. B-スプラインが有理であるとは,重みの中に等しくないものが存在することをいう。多

項式ならば,重みは,すべて暗黙で 1 にしてもよい。

3. b_spline_surface が一様,準一様又は区分的ベジエの場合,ノット及びノット多重度は,

暗黙にしてもよい(すなわち,属性定義によって指定されたデータが存在しなくてもよ

い。

。ノットを暗黙値にする場合,離れたノットの間の差は,1.0 が仮定され,その曲面

の有効なパラメタ範囲は,0.0 から始まる。これらの暗黙値は,下位型が与える。

4.  非一様の場合には,ノット及びノット多重度は,暗黙にしてはならない。 
5.  重み及びノットの暗黙化は,互いに独立に行われる。

データは,次のとおり解釈する。

(a)  ここで使用される記号は,次のとおりとする。

K1=

制御点の 方向の添字の上限

K2=

制御点の

υ方向の添字の上限

P

ij

=

制御点

w

ij

=

重み

d1=u

方向の次数

d2=

υ方向の次数

(b)  制御点は,次のとおり順序付けられる。

P

00

P

01

P

02

,

……,P

K1(K2-1)

P

K1K2


65

B 3700-42:1996 (ISO 10303-42:1994)

有理の場合,重みも同様に順序付けられる。

(c)  がパラメタ 又はパラメタ

υのいずれかを表すとき,を制御点の添字の上限とし,を に対する

次数とすると,ノット配列は,  (kd+2)  個の実数  [s

d

,…,s

k

1

]

の配列となる。ただし,  [−d,k]

の範囲のすべての添字 について s

j

s

j+1

とする。この配列は,リスト u_knots 又は v_knots から,多重

度に応じて各多重ノットを繰り返すことで得られる。番目の次数 の正規化された B-スプライン基

底関数

i

d

N

は,この配列の部分集合  [s

i

d

,

…,s

i

1

]

上で定義される。

(d)  をノットリスト中で値の異なるものの個数とする。は,“ノットの添字の上限 (knot_u_upper,

knot_v_upper)

”として参照される。m

j

を 番目の異なるノット値の多重度(繰返しの数)とする。こ

の場合,次のとおりとなる。

å

L

i

i

k

d

m

1

2

すべてのノット多重度は,最初及び最後を除き,1∼の範囲になければならない。最初のもの及び

最後のものは,最大で dをとることができる。基底関数の値を求める場合,例えば,多重度 3 のノ

ット は,ノット配列における並び u,u,として解釈される。

(e) surface_form は,特定の 2 次曲面(次数は 2),線織面及び surface_of_revolution を識別するために用い

られる。b_spline_curve と同様,surface_form は参考とし,曲面のデータが優先される。

(f)  曲面は,次のとおり解釈される。多項式のとき,曲面は,次の式で与えられる。

åå

1

0

2

0

2

1

)

(

)

(

)

,

(

K

i

K

j

d

j

d

i

ij

v

N

u

N

v

u

P

σ

有理式のとき,曲面の式は,次のとおりとする。

å å

å å

1

0

2

0

2

1

1

0

2

0

2

1

)

(

)

(

)

(

)

(

)

,

(

K

i

K

j

d

j

d

i

ij

K

i

K

j

d

j

d

i

ij

ij

v

N

u

N

w

v

N

u

N

w

v

u

P

σ

備考

  B-スプライン基底関数の

1

d

i

N

(u)

及び

2

d

i

N

(

υ

)

の定義は,

附属書

E(参考)の E

1

E

3

による。こ

れらの参考文献における用語の違いには,注意を要する。

EXPRESS

による定義

*)

ENTITY b_spline_surface

   SUPERTYPE  OF  (ONEOF(b_spline_surface_with_knots,  uniform_surface,

                          quasi_uniform_surface,  bezier_surface)

                            ANDOR  rational_b_spline_surface)

   SUBTYPE  OF  (bounded_surface);

   u_degree  

:  INTEGER;

   v_degree  

:  INTEGER;

   control_points_list

:  LIST  [2:?]OF

                        LIST  [2:?]OF  cartesian_point;

   surface_form  

:  b_spline_surface_form;

   u_closed  

:  LOGICAL;


66

B 3700-42:1996 (ISO 10303-42:1994)

   v_closed  

:  LOGICAL;

   self_intersect

:  LOGICAL;

DERIVE

   u_upper  

:  INTEGER  :=  SIZEOF(control_points_list)  -1;

   v_upper     

:  INTEGER  :=  SIZEOF(control_points_list[1])  -1;

   control_points

:  ARRAY  [0:u_upper]OF  ARRAY  [0:v_upper]OF

                      cartesian_point

                 :=  make_array_of_array(control_points_list,

                                                     0,u_upper,0,v_upper);

WHERE

   WR1: ('GEOMETRY_SCHEMA.UNIFORM_SURFACE' IN TYPEOF(SELF)) OR

        ('GEOMETRY_SCHEMA.QUASI_UNIFORM_SURFACE'  IN  TYPEOF(SELF))  OR

        ('GEOMETRY_SCHEMA.BEZIER_SURFACE'  IN  TYPEOF(SELF))  OR

        ('GEOMETRY-SCHEMA.B_SPLINE_SURFACE_WITH_KNOTS'  IN  TYPEOF(SELF));

END_ENTITY;

(*

属性定義

u_degree

に関する基底関数の代数的な次数。

v_degree

υ

に関する基底関数の代数的な次数。

control_points_list

:制御点のリストのリスト。

surface_form

:特定の曲面形式の識別子(4.3.5 参照)。

u_closed

方向で曲面が閉じているかどうかの表示。これは,参考とする。

v_closed

υ

方向で曲面が閉じているかどうかの表示。これは,参考とする。

self_intersect

:曲面が自己干渉するかどうかを示すフラグ。これは,参考とする。

u_upper

方向での制御点の添字の上限。

v_upper

υ

方向での制御点の添字の上限。

control_points

:曲面の幾何を定義する制御点の(2 次元)配列。これは,control_points_list から導出される。

形式的要件

WR1

このエンティティのインスタンス化は,下位型の b_spline_surface_with_knots, uniform_surface,

quasi_uniform_surface

又は bezier_surface のうちの 1 個でなければならない。

4.4.61  b_spline_surface_with_knots  これは,ノット値か明示的に与えられた b_spline_surface とする。こ

の下位型は,非一様な b_spline_surface を表現するために用いるか,他の knot_type のために用いてもよい。

すべてのノット多重度は,最初のもの及び最後のものを除き,1∼の範囲になければならない。最初の

もの及び最後のものは,最大で d+1 をとることかできる。

基底関数の値を求める場合,例えば,多重度 3 のノット は,ノット配列における並び u,u,として解釈

される。

EXPRESS

による定義

*)

ENTITY b_spline_surface_with_knots

   SUBTYPE  OF  (b_spline_surface);


67

B 3700-42:1996 (ISO 10303-42:1994)

   u_multiplicities

:  LIST  [2:?]OF  INTEGER;

   v_multiplicities

:  LIST  [2:?]OF  INTEGER;

   u_knots  

:  LIST  [2:?]OF  parameter_value;

   v_knots      : LIST [2:?]OF parameter_value;

   knot_spec  

:  knot_type;

DERIVE

   knot_u_upper

:  INTEGER  :=  SIZEOF(u_knots);

   knot_v_upper

:  INTEGER  :=  SIZEOF(v_knots);

WHERE

   WR1:  constraints_param_b_spline(SELF

b_spline_surface.u_degree,

                knot_u_upper,  SELF

b_spline_surface.u_upper

                           u_multiplicities,  u_knots);

   WR2:  constraints_param_b_spline(SELF

b_spline_surface.v_degree,

                knot_v_upper,  SELF

b_spline_surface.v_upper,

                           v_multiplicities,  v_knots);

   WR3:  SIZEOF(u_multiplicities)  =  knot_u_upper;

   WR4:  SIZEOF(v_multiplicities)  =  knot_v_upper;

END_ENTITY;

(*

属性定義

u_multiplicities

方向でのノットの多重度。

v_multiplicities

υ

方向でのノットの多重度。

u_knots

方向での相異なるノットのリスト。

v_knots

υ

方向での相異なるノットのリスト。

knot_spec

:ノットの種類の記述。

knot_u_upper

方向での相異なるノットの個数。

knot_v_upper

υ

方向での相異なるノットの個数。

SELF

\b_spline_surface.u_degree:に関する基底関数の代数的な次数。

SELF

\b_spline_surface.v_degree:

υ

に関する基底関数の代数的な次数。

SELF

\b_spline_surface.control_points_list:制御点のリストのリスト。

SELF

\b_spline_surface.surface_form:特定の曲面形状の識別子(詳細は,4.3.5 参照)。

SELF

\b_spline_surface.u_closed:方向で曲面が閉じているかどうかの表示。これは,参考とする。

SELF

\b_spline_surface.v_closed:

υ

方向で曲面が閉じているかどうかの表示。これは,参考とする。

SELF

\b_spline_surface.self_intersect:曲面が自己干渉するかどうかを示すフラグ。これは,参考とする。

SELF

\b_spline_surface.u_upper:方向での制御点の添字の上限。

SELF

\b_spline_surface.v_upper:

υ

方向での制御点の添字の上限。

SELF

\b_spline_surface.control_points:曲面の幾何を定義する制御点の(2 次元)配列。この配列は,

control_points_list

から作られる。

形式的要件

WR1

u

方向のパラメタ化において矛盾が見いだせない場合,constraints_param_b_spline は,TRUE を返す。


68

B 3700-42:1996 (ISO 10303-42:1994)

WR2

υ

方向のパラメタ化において矛盾が見いだせない場合,constraints_param_b_spline は,TRUE を返す。

WR3:u_multiplicities の個数は,u_knots の個数と同じとする。 
WR4:v_multiplicities の個数は,v_knots の個数と同じとする。

4.4.62  uniform_surface  これは,b_spline_surface の特殊な下位型とし,ノットが等間隔に配置されたも

のとする。この場合,ノット及びノット多重度に対して適切な暗黙値が導出される。

B-

スプラインが一様であるとは,すべてのノット多重度が 1 で,すべてのノットが直前のノットとある

正の定数だけ異なることをいう。この下位型では,ノットは,−から始まり,間隔は 1.0 とする。ここで,

d

は次数とする。

EXPRESS

による定義

*)

ENTITY uniform_surface

   SUBTYPE  OF  (b_spline_surface);

END_ENTITY;

(*

備考

  曲面について明示的なノット値が要求されるときは,次のとおり導出される。

ku_up=SELF

\b_spline_surface.u_upper+SELF\b_spline_surface.u_degree+2

kv_up=SELF

\b_spline_surface.v_upper+SELF\b_spline_surface.v_degree+2

値 ku_up は,u 方向におけるノット及びノット多重度のリストの添字の上限に必要なこ

とがある。これは,この方向における次数及び制御点の個数から計算される。

値 kv_up は,

υ

方向におけるノット及びノット多重度のリストの添字の上限に必要なこ

とがある。これは,この方向における次数及び制御点の個数から計算される。

u

及び

υ

の方向におけるノット多重度及びノットは,次の関数呼び出しによって計算する

ことができる。

default_b_spline_knot_mult(SELF

\b_spline_surface.u_degree, ku_up, uniform_knots)

default_b_spline_knots(SELF

\b_spline_surface.u_degree, ku_up, uniform_knots)

default_b_spline_knot_mult(SELF

\b_spline_surface.v_degree, kv_up, uniform_knots)

default_b_spline_knots(SELF

\b_spline_surface.v_degree, kv_up, uniform_knots)

4.4.63  quasi_uniform_surface  これは,b_spline_surface の特殊な下位型とし,最初のもの及び最後のもの

を除き,ノットは,等間隔に配置され,多重度 1 をもつ。この場合,ノット及びノット多重度に対して,

適切な暗黙値が導出される。

B-

スプラインが準一様であるとは,ノットが端点では多重度 (degree+1) を,それ以外では多重度 1 をも

ち,各ノットが直前のノットからある正の定数だけ異なることをいう。この下位型では,ノットは,0.0

から始まり,その間隔は 1.0 とする。

EXPRESS

による定義

*)

ENTITY quasi_uniform_surface

   SUBTYPE  OF  (b_spline_surface);

END_ENTITY;

(*

備考

  曲面について明示的なノット値が要求されるときは,次のとおり導出される。


69

B 3700-42:1996 (ISO 10303-42:1994)

ku_up=SELF

\b_spline_surface.u_upper-SELF\b_spline_surface.u_degree+2

kv_up=SELF

\b_spline_surface.v_upper-SELF\b_spline_surface.v_degree+2

値 ku_up は,u 方向におけるノット及びノット多重度のリストの添字の上限に必要なこ

とがある。これは,この方向における次数及び制御点の個数から計算される。

値 kv_up は,

υ

方向におけるノット及びノット多重度のリストの添字の上限に必要なこ

とがある。これは,この方向における次数及び制御点の個数から計算される。

u

及び

υ

の方向におけるノット多重度及びノットは,次の関数呼び出しによって計算する

ことができる。

default_b_spline_knot_mult(SELF

\b_spline_surface.u_degree, ku_up, quasi_uniform_knots)

default_b_spline_knots(SELF

\b_spline_surface.u_degree, ku_up, quasi_uniform_knots)

default_b_spline_knot_mult(SELF

\b_spline_surface.v_degree, kv_up, quasi_uniform_knots)

default_b_spline_knots(SELF

\b_spline_surface.v_degree, kv_up, quasi_uniform_knots)

4.4.64  bezier_surface  これは,b_spline_surface の特殊な下位型とし,ノットが等間隔で,高い多重度を

もつものとする。この場合,ノット及びノット多重度に対して,適切な暗黙値が導出される。この下位型

では,ノットは 0.0 から始まり,その間隔は 1.0 とする。

EXPRESS

による定義

*)

ENTITY bezier_surface

   SUBTYPE  OF  (b_spline_surface);

END_ENTITY;

(*

備考

  曲面について明示的なノット値が要求されるときは,次のとおり導出される。

1

e.v_degree

ine_surfac

SELF/b_spl

e.v_upper

ine_surfac

SELF/b_spl

ku_vp

+1

e.u_degree

ine_surfac

SELF/b_spl

e.u_upper

ine_surfac

SELF/b_spl

ku_up=

値 ku_up は,u 方向におけるノット及びその多重度のリストの添字の上限に必要なこと

がある。これは,この方向における次数及び制御点の個数によって計算される。

値 kv_up は,

υ

方向におけるノット及びその多重度のリストの添字の上限に必要なこと

がある。これは,この方向における次数及び制御点の個数によって計算される。

u

及び

υ

の方向におけるノット多重度及びノットは,次の関数呼び出しによって計算する

ことができる。

default_b_spline_knot_mult(SELF

\b_spline_surface.u_degree, ku_up, bezier_knots)

default_b_spline_knots(SELF

\b_spline_surface.u_degree, ku_up, bezier_knots)

default_b_spline_knot_mult(SELF

\b_spline_surface.v_degree, kv_up, bezier_knots)

default_b_spline_knots(SELF

\b_spline_surface.v_degree, kv_up, bezier_knots)

4.4.65  rational_b_spline_surface  rational_b_spline_surface は,制御点,関連付けられた重み及び基底関数

によって記述された区分的パラメタ有理曲面とする。この下位型は,b_spline_surface の他の下位型の一つ

(これは,基底関数を定義するためのノットの値を,明示的に又は暗黙に与える。

)とともにインスタンス

化される。


70

B 3700-42:1996 (ISO 10303-42:1994)

曲面は,次のとおり解釈される。

å å

å å

1

0

2

0

2

1

1

0

2

0

2

1

)

(

)

(

)

(

)

(

)

,

(

K

i

K

j

d

j

d

i

ij

K

i

K

j

d

j

d

i

ij

ij

v

N

u

N

w

v

N

u

N

w

v

u

P

σ

備考

  上の式で使用される記号については,4.4.60 参照。

EXPRESS

による定義

*)

ENTITY rational_b_spline_surface

   SUBTYPE  OF  (b_spline_surface);

   weights_data  :  LIST  [2:?]OF

                 LIST  [2:?]OF  REAL;

DERIVE

  weights      :  ARRAY  [0:u_upper]OF

                 ARRAY  [0:v_upper]OF  REAL

                :=  make_array_of_array(weights_data,0,u_upper,0,v_upper);

WHERE

   WR1:  (SIZEOF(weights_data)  =

                          SIZEOF(SELF

b_spline_surface.control_points_list))

           AND  (SIZEOF(weights_data[1])  =

                          SIZEOF(SELF

b_spline_surface.control_points_list[1]));

   WR2:  surface_weights_positive(SELF);

END_ENTITY;

(*

属性定義

weights_data

:有理のとき,制御点に関連付けられた重み。

weights

:weights_data から構成される重みの(2 次元)配列。

形式的要件

WR1

重みの配列の大きさは,制御点のデータと整合しなければならない。

WR2

個々の制御点に関連付けられた重みは,0.0 を超えなければならない。

4.4.66  rectangular_trimmed_surface  rectangular_trimmed_surface は,u=u

1

u=u

2

υ

=

υ

1

,及び

υ

=

υ

1

という

等パラメタ線を境界とする単純な bounded_surface とする。これらのすべての値は,参照された曲面のパラ

メタ範囲内でなければならない。パラメタ範囲の循環的な性質が仮定されている。

備考

1.  例えば,三角関数(sin, cos)を用いて定義されるパラメタ形式をもつ曲面では,370°は,

10

°と等価になる。rectangular_trimmed_surface は,パラメタ化を basis_surface から直接

継承しており,0から|u

2

u

1

|

まで及び0から|

υ

2

υ

1

|

までのパラメタ範囲をもつ。前のパラ

メタから新しいパラメタを導出するには,4.4.34のアルゴリズムを用いる。

2.  曲面が与えられたパラメタ方向で閉じているときには,u

2

又は

υ

2

の値がパラメタ範囲の

分だけ増えることを要求してもよい。

EXPRESS

による定義

*)


71

B 3700-42:1996 (ISO 10303-42:1994)

ENTITY rectangular_trimmed_surface

   SUBTYPE  OF  (bounded_surface);

   basis_surface  :  surface;

   u1    :  parameter_value;

   u2         :  parameter_value;

   v1         : parameter_value;

   v2         :  parameter_value;

   usense       :  BOOLEAN;

   vsense  

:  BOOLEAN;

WHERE

   WR1:  u1  <>  u2;

   WR2:  v1  <>  v2;

   WR3: (('GEOMETRY_SCHEMA.ELEMENTARY_SURFACE' IN TYPEOF(basis_surface)) AND

         (NOT('GEOMETRY_SCHEMA.PLANE'  IN  TYPEOF(basis_surface))))  OR

         ('GEOMETRY_SCHEMA.SURFACE_OF_REVOLUTION'  IN  TYPEOF(basis_surface))  OR

         (usense  =(u2  >  u1));

   WR4: (('GEOMETRY_SCHEMA.SPHERICAL_SURFACE' IN TYPEOF(basis_surface)) OR

         ('GEOMETRY_SCHEMA.TOROIDAL_SURFACE'  IN  TYPEOF(basis_surface)))  OR

         (vsense  =  (v2  >  v1));

END_ENTITY;

(*

属性定義

basis_surface

:トリムされる曲面。

u1

:パラメタ の 1 番目の値。

u2

:パラメタ の 2 番目の値。

v1

:パラメタ

υ

の 1 番目の値。

v2

:パラメタ

υ

の 2 番目の値。

usense

:rectangular_trimmed_surface のパラメタ の方向が,basis_surface の の向きと同じか又は反対かを

指示するフラグ。

vsense

:rectangular_trimmed_surface のパラメタ

υ

の方向が,basis_surface の

υ

の向きと同じか又は反対かを指

示するフラグ。

形式的要件

WR1

u1

及び u2 は,異なる値をもたなければならない。

WR2

v1

及び v2 は,異なる値をもたなければならない。

WR3方向で閉じている曲面を除いて,u_sense は,の順序付けられたパラメタ値と両立しなければな

らない。

WR4

υ

方向で閉じている曲面を除いて,v_sense は,

υ

の順序付けられたパラメタ値と両立しなければな

らない。

非形式的要件

IP1

rectangular_trimmed_surface

の定義域は,トリムされる元の曲面の定義域内になければならない。


72

B 3700-42:1996 (ISO 10303-42:1994)

4.4.67  curve_bounded_surface  curve_bounded_surface は,1 個以上の boundary_curve によって定義される

boundary

をもつパラメタ曲面とする。これらの境界のうちの 1 個は,外周の境界でもよい。内部の境界の

個数は,幾つでもよい。外周の境界は,曲面の自然な境界として暗黙に定義されてもよい。このことは,

フラグ implicit_outer が TRUE となることによって示される。このとき,少なくとも 1 個の内部の境界が定

義されなければならない。

(円柱のような)閉じた曲面のときは,与えられたどの境界が外周であるかを判

別できなくてもよい。basis_surface 上の curve_bounded_surface の領域は,境界の任意の点から N×の方

向にある basis_surface の部分として定義される。ここで,は曲面の法線とし,は境界の接ベクトルと

する。このようにして定義される領域は,弧状連結でなければならない。

EXPRIESS

による定義

*)

ENTITY curve_bounded_surface

   SUBTYPE  OF  (bounded_surface);

   basis_surface

:  surface;

   boundaries  :  SET[1:?]OF  boundary_curve;

   implicit_outer

:  BOOLEAN;

WHERE

   WR1:  NOT(implicit_outer  AND

              ('GEOMETRY_SCHEMA.OUTER_BOUNDARY_CURVE'  IN  TYPEOF(boundaries)));

   WR2:  (NOT(implicit_outer))  OR

               ('GEOMETRY_SCHEMA.BOUNDED_SURFACE'  IN  TYPEOF(basis_surface));

   WR3: SIZEOF(QUERY(temp <* boundaries |

                 'GEOMETRY_SCHEMA.OUTER_BOUNDARY_CURVE'  IN

                                              TYPEOF(temp)))  <=  1;

   WR4: SIZEOF(QUERY(temp <* boundaries |

           (temp

composite_curve_on_surface.basis_surface[1]:<>:

                                      SELF.basis_surface)))  =  0;

END_ENTITY;

(*

属性定義

basis_surface

:境界付けられる曲面。

boundaries

:曲面の境界曲線。ただし,暗黙の外周の境界が存在する場合は,それを除く。これらのうち,

outer_boundary_curve

とすることで外周の境界として識別できるのは,たかだか 1 個とする。

implicit_outer

:TRUE のとき,曲面の自然な境界が外周の境界として用いられることを示すブール型のフ

ラグ。

備考

  これらの属性の解釈は,

10 参照。

形式的要件

WR1

implicit_outer

が TRUE のときは,明示的な外周の境界は,存在してはならない。

WR2

basis_surface

が境界付けられているときは,外周の境界は,暗黙にだけ定義されるものとする。

WR3:boundaries に含まれる outer_boundary_curve は,たかだか 1 個とする。

WR4:各 boundary_curve は,basis_surface 上になければならない。このことは,boundaries の各要素につい


73

B 3700-42:1996 (ISO 10303-42:1994)

て上位型 composite_curve_on_surface の属性 basis_surface から確かめられる。

10

curve_bounded_surface

非形式的要件

IP1

集合 boundaries 内の各曲線は,閉じていなければならない。

IP2

集合 boundaries 内のいかなる 2 本の曲線も,交差してはならない。

IP3:たかだか 1 個の boundary_curve が他のすべての boundary_curve を囲んでもよい。outer_boundary_curve

が指定されたときは,その曲線だけが他のいかなる boundary_curve をも囲む。

4.4.68  boundary_curve  boundary_curve は,曲面の境界の定義に適した bounded_curve の下位型とする。 
EXPRESS

による定義

*)

ENTITY boundary_curve

   SUBTYPE  OF  (composite_curve_on_surface);

WHERE

   WR1:  SELF

composite_curve.closed_curve;

END_ENTITY;

(*

形式的要件

WR1

上位型 composite_curve の誘導属性 closed_curve は,TRUE でなければならない。

4.4.69  outer_boundary_curve   こ れ は , 曲 面 の 外 周 の 境 界 を 定 義 す る と い う 意 味 を も た せ た

boundary_curve

の特殊な下位型とする。このような曲線は,curve_bounded_surface の集合 boundaries 内に 2

個以上含まれてはならない。


74

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS

による定義

*)

ENTITY outer_boundary_curve

   SUBTYPE  OF  (boundary_curve);

END_ENTITY;

(*

4.4.70  rectangular_composite_surface  これは,n_u×n_v 個のセグメント,すなわち,パッチの長方形配

列から構成される複合曲面とする。各セグメントは,有限で位相的に長方形とする(すなわち,各セグメ

ントがパラメタ空間内の長方形に対応する。

セグメントは,

b_spline_surface

か rectangular_trimmed_surface

かのいずれかでなければならない。隣接するセグメント間では,及び

υ

の方向について,少なくとも位置

の連続性がなければならない。

この複合曲面は,

それぞれの方向について開いていても閉じていてもよい。

個々のセグメント S

ij

(=segments[i][j])に関して,次が成り立つ。

−  方向の 1 個手前のセグメントを S

(i-1)j

υ

方向の 1 個手前のセグメントを S

i(j-1)

とする。1 個後のセ

グメントも同様に,それぞれ S

(i+1)j

とし,S

i(j+1)

とする。

− segments[i][j].u_sense が TRUE のときは,S

ij

が S

(i+1)j

と隣接する箇所の境界は,(基礎となる

bounded_surface

の)パラメタ の値が大きい方とする。segments[i][j].u_sense が FALSE のときは,

この境界は,パラメタ の値が低い方とする。v_sense についても同様とする。

−  この複合曲面における S

ij

の に関するパラメタ化は,基礎となる bounded_surface のパラメタ化

を i−1 から まで線形に写像したものとする。を rectangular_composite_surface のパラメタ 

し,u

ij

u

ij0

u

ij

u

ij1

)を segments[i][j]のパラメタ とするとき,これらのパラメタは,次の式に

よって関係付けられる。

segments[i][j].u_sense=TRUE

のとき,次のとおりとする。

U=(i

−1)+

0

1

0

ij

ij

ij

ij

u

u

u

u

=u

ij0

+(U−(i−1))(u

ij1

u

ij0

)

segments[i][j].u_sense=FALSE

のとき,次のとおりとする。

U=i

0

1

0

ij

ij

ij

ij

u

u

u

u

=

u

ij0

−(Ui)(u

ij1

u

ij0

)

υ

に関するパラメタ化も同様にして得られる。したがって,複合曲面のパラメタ範囲は,0∼n_u

及び 0∼n_v となる。

−  S

ij

と S

(i+1)j

との間での連続性は,segments[i][j].u_transition によって与えられる。

パッチ S

(n_u)j

については,この複合曲面が 方向で開いているとき,discontinuous という値をと

ってもよい。それ以外のときは,曲面はここで閉じており,transition_code は,S

1j

への連続性を示

す。v_transition についても同様とする。これらの場合を除いて,discontinuous は,surface_patch の

transition_code

に現れてはならない。

EXPRESS

による定義

*)

ENTITY rectangular_composite_surface

   SUBTYPE  OF  (bounded_surface);

   segments : LIST [1:?]OF LIST [1:?]OF surface_patch;

DERIVE


75

B 3700-42:1996 (ISO 10303-42:1994)

   n_u  :  INTEGER

:=  SIZEOF(segments);

   n_v  :  INTEGER

:=  SIZEOF(segments[1]);

WHERE

   WR1: []= QUERY (s <* segments | n_v <> SIZEOF (s));

   WR2:  constraints_rectangular_composite_surface(SELF);

END_ENTITY;

(*

属性定義

n_u

方向での surface_patch の個数。

n_v

υ

方向での surface_patch の個数。

segments

:構成要素となる surface_patch の長方形配列(リストのリストによって表現される。)。各パッ

チは,向き及び遷移の情報をもつ。segments[i][j].u_transition は,segments[i][j]と segments[i+1][j]との間の連

続性を示す。最後の列(segments[n_u][j].u_transition)は,曲面が(その行の)方向で閉じていないこと

を示す値 discontinuous をもってもよい。リストの残りの要素は,この値をもつことができない。最後の行

(segments[i][n_v].v_transition)は,曲面が(その列の)

υ

方向で閉じていないことを示す値 discontinuous

をもってもよい。リストの残りの要素は,この値をもつことができない。

形式的要件

WR1

リスト segments 内の各部分リストは,n_v 個の surface_patch をもたなければならない。

WR2

segments

に関する制約は,次のとおりとする。

−  構成要素の曲面は,すべて,rectangular_trimmed_surface 又は b_spline_surface とする。

−  最後の列又は行を除いて,リスト segments 内の transition_code は,discontinuous という値をもたな

い。値 discontinuous が現れるときは,曲面がその方向で閉じていないことを示す。

非形式的要件

IP1

構成要素の曲面の向きは,segments の各要素の u_sense 及び v_sense で指定される。

4.4.71  surface_patch  surface_patch は,遷移及び向きの付加的な情報をもつ bounded_surface の下位型と

する。これは,rectangular_composite_surface を定義するのに用いる。

EXPRESS

による定義

*)

ENTITY surface_patch

   parent_surface

:  bounded_surface;

   u_transition

:  transition_code;

   v_transition

:  transition_code;

   u_sense  :  BOOLEAN;

   v_sense  :  BOOLEAN;

 INVERSE

   using_surfaces : BAG[1:?]OF rectangular_composite_surface FOR segments;

WHERE

   WR1:  (NOT  ('GEOMETRY_SCHEMA.CURVE_BOUNDED_SURFACE'

                 IN  TYPEOF(parent_surface)));

END_ENTITY;


76

B 3700-42:1996 (ISO 10303-42:1994)

(*

属性定義

parent_surface

:曲面の幾何及び境界を定義する surface。

u_transition

:パッチの 2 番目の 境界が隣のパッチの 1 番目の 境界に接続するとき,この境界上で保証

される幾何的連続性。最後のパッチのとき,これは,rectangular_composite_surface の最初の 境界と最後

の 境界との連続性を定義する。

v_transition

:パッチの 2 番目の

υ

境界が隣のパッチの 1 番目の

υ

境界に接続するとき,この境界上で保証さ

れる幾何的連続性。最後のパッチのとき,これは,rectangular_composite_surface の最初の

υ

境界と最後の

υ

境界との連続性を定義する。

u_sense

:これは,パッチの(パラメタ値が増加する)向きと parent_surface の向きとの関係を定義する。

u_sense

が TRUE のとき,パッチの 1 番目の 境界は,パラメタ が最小値をとる境界となり,FALSE の

ときは,パラメタ が最大値をとる境界となる。

v_sense

:これは,パッチの(パラメタ値が増加する)向きと parent_surface の向きとの関係を定義する。

v_sense

が TRUE のとき,パッチの 1 番目の

υ

境界は,パラメタ

υ

が最小値をとる境界となり,FALSE のと

きは,パラメタ

υ

が最大値をとる境界となる。

using_surfaces

:この surface_patch を定義に用いる rectangular_composite_surface の多重集合。この多重集合

は,空であってはならない。

形式的要件

WR1

curve_bounded_surface

は,surface_patch を定義するのに用いてはならない。

4.4.72  offset_surface  これは,元となる曲面から法線方向に一定の距離(distance)だけ離れている,単

純なオフセット曲面の手続き的な定義とする。distance は,曲面のオフセットされる側を示し,正,負又

は 0 をとる。正の側と結果としてのオフセット曲面とは,次のとおり定義される。

(a)  元の曲面の 及び

υ

の方向での単位接ベクトルを定義し,それぞれ

σ

u

及び

σ

υ

と表す。

(b)  これらの外積 N=

σ

u

×

σ

υ

をとる(

σ

u

及び

σ

υ

は,線形独立でなければならない。さもなければオフセット

曲面は,存在しない。

。可能なときは,特異点においても,連続性によって を定める。

(c)  (曲面に対する)単位法線ベクトルを得るために,を正規化する。 
(d) offset_surface 上の点を見つけるために,そのベクトルに沿ってオフセットする距離(0 でもよい。)を

動く。

備考

  この定義は,offset_surface が自己干渉することを許す。

offset_surface

のパラメタ化は,basis_surface のパラメタ化から直接得られる。すなわち,対応する点は,

同じパラメタ値をもつ。offset_surface は,次のとおりパラメタ化される。

σ

(

u,v)=S(u,v)+dN

ここで,はパラメタ値  (u,

υ

)

における basis_surface  S  (u,v)  への単位法線ベクトルとし,は distance と

する。

備考

  このエンティティを使用するときには,オフセットする距離が,basis_surface の任意の点

での曲率半径を超えないことが望ましい。特に曲面は,内部に尾根又は特異点をもたない

ことが望ましい。

EXPRESS

による定義

*)

ENTITY offset_surface


77

B 3700-42:1996 (ISO 10303-42:1994)

   SUBTYPE  OF  (surface);

   basis_surface

:  surface;

   distance  :  length_measure;

   self_intersect

:  LOGICAL;

END_ENTITY;

(*

属性定義

basis_surface

:オフセットされる曲面。

distance

:オフセットする距離。正,負又は 0 をとる。距離は,曲面の法線の方向を正として測る。

self_intersect

:曲面が自己干渉するかどうかを示すフラグ。これは,参考とする。

4.4.73  surface_replica  これは,既に存在する surface の複製(replica)を,異なる配置で定義する。これ

は,parent_surface 及び新たな位置を与える transformation を(場合によっては,拡大・縮小を含む。

)参照

することで定義する。元となる surface は,影響されない。生成された surface の幾何的な特徴は,

parent_surface

のものと同じとなる。しかし,transformation が拡大・縮小を含むときは,大きさが異なって

もよい。

EXPRESS

による定義

*)

ENTITY surface_replica

   SUBTYPE  OF  (surface);

   parent_surface  :  surface;

   transformation  :  cartesian_transformation_operator_3d;

WHERE

   WR1:  acyclic_surface_replica(SELF,  parent_surface);

END_ENTITY;

(*

属性定義

parent_surface

:複製される surface。

transformation

: parent_surface に 対 す る surface_replica の 配 置 , 向 き 及 び 拡 大 ・ 縮 小 を 定 義 す る

cartesian_transformation_operator_3d

形式的要件

WR1

surface_replica

は,自分自身の定義に現れてはならない。

4.5

geometry_schema

の規則定義

4.5.1

compatible_dimension  規則 compatible_dimension は,次のことを保証する。

(a)  すべての geometric_representation_item は,一つ以上の geometric_representation_context 座標空間に幾何

的に基礎付けられている。

(b)  複数の geometric_representation_item がともに一つの座標空間に幾何的に基礎付けられるとき,それら

は,それぞれか幾何的に基礎付けられている座標空間の dimension_count と一対であることを保証する

ことによって,同一の座標空間の dimension_count をもつ。

備考

  一 つ の geometric_representation_context に 幾 何 的 に 基 礎 付 け ら れ て い る 2 次 元 の

geometric_representation_item

coordinate_space_dimension

2


78

B 3700-42:1996 (ISO 10303-42:1994)

geometric_representation_context

に幾何的に基礎付けられるだけとする。このような関係にある

すべての geometric_representation_item は,2 次元とする。dimension_count の他のすべての値は,

同様に振る舞う。

EXPRESS

による定義

*)

 RULE compatible_dimension FOR

   (cartesian_point,

   direction,

   representation_context,

   geometric_representation_context);

WHERE

   --

各々の

 cartesian_point

 coordinates

の個数が,幾何的に基礎付けられ

   --

ている

 geometric_context

のそれぞれの

 coordinate_space_dimension

   --

に合致していることを保証する。

   WR1: SIZEOF(QUERY(x <* cartesian_point | SIZEOF(QUERY

        (y  <*  geometric_representation_context  |  item_in_context(x,y)  AND

        (HIINDEX(x.coordinates)  <>  y.coordinate_space_dimension)))  >  0  ))  =0;

   --

各々の

 direction

 direction_ratios

の個数が,幾何的に基礎付けられ

   --

ている

 geometric_context

のそれぞれの

 coordinate_space_dimension

   --

に合致していることを保証する。

   WR2: SIZEOF(QUERY(x <* direction | SIZEOF(QUERY

        (y  <*  geometric_representation_context  |  item_in_context(x,y)  AND

        (HIINDEX(x.direction_ratios)  <>  y.coordinate_space_dimension)))

        >  0  ))  =  0;

END_RULE;

(*

形式的要件

WR1

幾何的に基礎付けられている geometric_representation_context の coordinate_space_dimension の値と異

なる要素数の coordinates をもつ cartesian_point は,存在しない。

WR2

幾何的に基礎付けられている geometric_representation_context の coordinate_space_dimension の値と異

なる要素数の direction_ratios をもつ direction は,存在しない。

備考

  次 の 理 由 に よ っ て , cartesian_point 及 び direction だ け の 検 査 は , す べ て の

geometric_representation_item

に対して十分とする。

(a)  すべての geometric_representation_item は,エンティティ representation の属性 items か

ら伝わる representation_item の木構造の中に表れる。JIS B 3700-43 の中のエンティテ

ィ representation_item の WR1 を参照。

(b)  それぞれの geometric_representation_item は,その位置及び向きの情報を,この木構造

の中の cartesian_point 又はエンティティ direction だけから得る。多くの場合,この参

照は,axis_placement を経由してなされる。

(c) geometric_representation_item は,座標空間との関連付け又は dimension_count の割当て


79

B 3700-42:1996 (ISO 10303-42:1994)

以外の用途には,用いられない。

4.6

geometry_schema

の関数定義

  EXPRESS 言語は,幾つかの組込み関数をもつ。ここでは,幾何スキ

ーマでの定義及び制約のために必要とされる付加的な関数に関して規定する。

4.6.1

dimension_of  関数 dimension_of は,入力 geometric_representation_item が幾何的に基礎付けられて

いる geometric_representation_context の整数 dimension_count を返す。

大域規則 compatible_dimension における制約の効力によって,

この値は,

入力 geometric_representation_item

の coordinate_space_dimension とする。この規則の定義は,4.5.1 による。

EXPRESS

による定義

*)

FUNCTION dimension_of(item : geometric_representation_item) :

  dimension_count;

  LOCAL

     x  :  SET  OF  representation;

     y  :  representation_context;

  END_LOCAL;

  --  item

が用いられている

 representation

の集合を見つける。

  x  :=  using_representations(item);

  --  geometric_representation_context

 dimension_count

を決定する。

  --  context_of_items

 geometric_representation_context

であり,

  --  x

のすべての値に対して同じ

 dimension_count

をもつことは,

  --

規則

 compatible_dimension

によって保証されている。

  y  :=  x[1].context_of_items;

  RETURN  (y

geometric_representation_context.coordinate_space_dimension);

END_FUNCTION;

(*

引数定義

item

:(入力)dimension_count を決定する geometric_representation_item。

4.6.2

acyclic_curve_replica  acyclic_curve_replica ブール関数は,与えられた curve_replica が,それ自身

の定義に関与しているか否かを判定する再帰関数とする。関数は,curve_replica が,それ自身の定義にお

いて,直接的又は間接的にそれ自身を参照している場合,FALSE を返す。

EXPRESS

による定義

*)

FUNCTION acyclic_curve_replica(rep : curve_replica; parent : curve)

                                        :  BOOLEAN;

   IF NOT (('GEOMETRY_SCHEMA.CURVE_REPLICA') IN TYPEOF(parent)) THEN

     RETURN  (TRUE);

  END_IF;

  (*  parent

が,型

 curve_replica

でない場合,

TRUE

を返す。

*)

  IF (parent :=: rep) THEN

     RETURN  (FALSE);


80

B 3700-42:1996 (ISO 10303-42:1994)

  (*  parent

 rep

と同じ

 curve_replica

の場合,

FALSE

を返す。

それ以外の場合,

parent

 parent_curve

で再び関数を呼ぶ。

*)

  ELSE  RETURN(acyclic_curve_replica(rep,  parent

curve_replica.parent_curve));

  END_IF;

END_FUNCTION;

(*

引数定義

rep

:(入力)循環的参照を検査する curve_replica。

parent

:(入力)curve_replica の定義の中で使われる curve。

4.6.3

acyclic_point_replica  acyclic_point_replica ブール関数は,与えられた point_replica が,それ自身の

定義に関与しているか否かを判定する再帰関数とする。関数は,point_replica が,それ自身の定義におい

て,直接的又は間接的にそれ自身を参照している場合,FALSE を返す。

EXPRESS

による定義

*)

FUNCTION acyclic_point_replica(rep : point_replica; parent : point)

                                                                              : BOOLEAN;

   IF NOT (('GEOMETRY_SCHEMA.POINT_REPLICA') IN TYPEOF(parent)) THEN

     RETURN (TRUE);

      END_IF;

  (* parent

が,型 point_replica でない場合,TRUE  を返す。*)

   IF (parent :=: rep) THEN

        RETURN (FALSE);

  (* parent

が rep と同じ point_replica の場合,FALSE  を返す。

それ以外の場合,parent  の parent_pt で再び関数を呼ぶ。*)

   ELSE RETURN(acyclic_point_replica(rep, parent

\point_replica.parent_pt));

      END_IF;

END_FUNCTION;

(*

引数定義

rep

:(入力)循環的参照を検査する point_replica。

parent

:(入力)point_replica の定義の中で使われる point。

4.6.4

acyclic_surface_replica  acyclic_surface_replica ブール関数は,与えられた surface_replica か,それ

自身の定義に関与しているか否かを判定する再帰関数とする。関数は,surface_replica が,それ自身の定義

において,直接的又は間接的にそれ自身を参照している場合,FALSE を返す。

EXPRESS

による定義

*)

FUNCTION acyclic_surface_replica(rep : surface_replica; parent : surface)

                                           :  BOOLEAN;

   IF NOT (('GEOMETRY_SCHEMA.SURFACE_REPLICA') IN TYPEOF(parent)) THEN

     RETURN  (TRUE);


81

B 3700-42:1996 (ISO 10303-42:1994)

   END_IF;

  (*  parent

が,型

 surface_replica

でない場合,

TRUE

を返す。

*)

   IF (parent :=: rep) THEN

     RETURN  (FALSE);

  (*  parent

が,

rep

と同じ

 surface_replica

である場合,

FALSE

を返す。

それ以外の場合,

parent

 parent_surface

で再び関数を呼ぶ。

*

   ELSE  RETURN(acyclic_surface_replica(rep,  parent

surface_replica.parent_surface));

   END_IF;

END_FUNCTION;

(*

引数定義

rep

:(入力)循環的参照を検査する surface_replica。

parent

:(入力)surface_replica の定義の中で使われる surface。

4.6.5

associated_surface  この関数は,pcurve_or_surface に関係付けられている唯一の曲面を決定する。

この関数は,surface_curve 及びその下位型に対する制約に必要となる。

EXPRESS

による定義

*)

FUNCTION associated_surface(arg : pcurve_or_surface) : surface;

   LOCAL

     surf  :  surface;

   END_LOCAL;

   IF 'GEOMETRY_SCHEMA.PCURVE' IN TYPEOF(arg) THEN

     surf  :=  arg.basis_surface;

   ELSE

     surf  :=  arg;

   END_IF;

   RETURN(surf);

END_FUNCTION;

(*

引数定義

arg

:(入力)関係付けられた parent_surface を決定する必要のある pcurve_or_surface。

surf

:(出力)arg と関係付けられる parent_surface。

4.6.6  base_axis  この関数は,3 個の正規化された直交する direction u[1],u[2]及び u[3]を返す。3 次元の

場合には,完全な入力データに対して,u[3]は axis3 の方向,u[1]は axis1 を u[3]に垂直な平面に投影した方

向,u[2]は u[1]及び u[3]の双方に直交し axis2 と同じ向きの方向とする。2 次元の場合には,u[1]は axis1 の

方向とし,u[2]は u[1]に垂直で axis2 と同じ向きの方向とする。不完全な入力データの場合は,暗黙値が導

入される。

EXPR:ESS

による定義

*)


82

B 3700-42:1996 (ISO 10303-42:1994)

FUNCTION base_axis(dim : INTEGER; axis1, axis2, axis3 : direction):

                                             LIST  [2:3]  OF  direction;

   LOCAL

     vec  :  direction;

     u

:  LIST  [2:3]  OF  direction;

     factor  :  REAL;

   END_LOCAL;

   IF  (dim  =3)  THEN

     u[3]  :=  NVL(normalise(axis3),  direction([0.0,0.0,1.0]));

     u[1]  :=  first_proj_axis(u[3],axis1);

     u[2]  :=  second_proj_axis(u[3],u[1],axis2);

   ELSE

     u[3]  :=  ?;

     IF  EXISTS(axis1)  THEN

       u[1]  :=  normalise(axis1);

       u[2]  :=  orthogonal_complement(u[1]);

       IF  EXISTS(axis2)  THEN

         factor  :=  dot_product(axis2,u[2]);

         IF  (factor  <  0.0)  THEN

           u[2].direction_ratios[1]  :=  -u[2].direction_ratios[1];

           u[2].direction_ratios[2]  :=  -u[2].direction_ratios[2];

         END_IF;

       END_IF;

     ELSE

       IF  EXISTS(axis2)  THEN

         u[2]  :=  normalise(axis2);

         u[1]  :=  orthogonal_complement(u[2]);

         u[1].direction_ratios[1]  :=  -u[1].direction_ratios[1];

         u[1].direction_ratios[2]  :=  -u[1].direction_ratios[2];

       ELSE

         u[1].direction_ratios[1]  :=  1.0;

         u[1].direction_ratios[2]  :=  0.0;

         u[2].direction_ratios[1]  :=  0.0;

         u[2].direction_ratios[2]  :=  1.0;

       END_IF;

     END_IF;

   END_IF;

   RETURN(u);

END_FUNCTION;

(*


83

B 3700-42:1996 (ISO 10303-42:1994)

引数定義

dim

:(入力)正規化された直交する方向を必要とする空間の次元の整数値。

axis1

:(入力)出力軸 u[1]の方向の最初の近似として用いる direction。

axis2

:(入力)u[2]の向きを決定するのに用いる direction。

axis3

:(入力)dim=3 の場合は u[3]の方向,dim=2 の場合は不定“?”。

u

:(出力)互いに直交する dim 個(すなわち,2 個又は 3 個)の方向のリスト。

参考

不定“

?

は,原国際規格では“NULL”と表記されている。EXPRESS において,

“NULL”は

予約語ではないが,

“?”は集合やリストの不定上限を示す記号であることから,原国際規格の

表現は“?”を表すものと解釈できる。この規格では,JIS B 3700-11 の表記法に従い,

不定“

?

と表記した。

4.6.7

build_2axes  この関数は,正規化された 2 個の直交する direction を返す。u[1]は ref_direction の方

向とし,u[2]は u[1]に垂直とする。入力データが不完全な場合には,ref_direction の暗黙値として,

(1.0, 0.0)

が与えられる。

EXPRESS

による定義

*)

FUNCTION build_2axes(ref_direction : direction) : LIST [2:2] OF direction;

   LOCAL

     u : LIST [2:2] OF direction;

   END_LOCAL;

   u[1]  :=  NVL(normalise(ref_direction),  direction([1.0,0.0]));

   u[2]  :=  orthogonal_complement(u[1]);

   RETURN(u);

END_FUNCTION;

(*

引数定義

ref_direction

:(入力)2 次元空間における参照 direction。暗黙値は,(1.0,0.0)とする。

u

:(出力)2 個の互いに直交する direction のリストで,u[1]は,ref_direction に平行とする。

4.6.8  build_axes  この関数は,正規化された 3 個の直交する direction を返す。u[3]は axis の方向とし,u[1]

は ref_direction を u[3]に垂直な平面に投影した方向,u[2]は u[3]と u[1]との外積とする。入力データが不完

全な場合には,暗黙値が与えられる。

EXPRESS

による定義

*)

FUNCTION build_axes(axis, ref_direction : direction):

                                   LIST  [3:3]  OF  direction;

   LOCAL

     u  :  LIST[3:3]  OF  direction;

   END_LOCAL;

   u[3]  :=  NVL(normalise(axis),  direction([0.0,0.0,1.0]));

   u[1]  :=  first_proj_axis(u[3],  ref_direction);

   u[2]  :=  normalise(cross-product(u[3],  u[1])).orientation;


84

B 3700-42:1996 (ISO 10303-42:1994)

   RETURN(u);

END_FUNCTION;

(*

引数定義

axis

:(入力)u[3]の direction。暗黙値は,(0.0, 0.0, 1.0)とする。

ref_direction

:(入力)u[1]を計算するのに用いる direction。

u

:(出力)3 次元空間における 3 個の互いに直交する direction のリストとする。

4.6.9

orthogonal_complement  この関数は,入力された direction に対して直交補空間の direction を返す。

入力は 2 次元の direction とし,結果は入力に対して垂直な direction とする。

EXPRESS

による定義

*)

FUNCTION orthogonal_complement(vec : direction) : direction;

   LOCAL

     result  :  direction;

   END_LOCAL;

   IF (vec.dim <> 2) OR NOT EXISTS (vec) THEN

     RETURN(?);

   ELSE

     result.direction_ratios[1]  :=  -vec.direction_ratios[2];

     result.direction_ratios[2]  :=  vec.direction_ratios[1];

     RETURN(result);

   END_IF;

END_FUNCTION;

(*

引数定義

vec

:(入力)2 次元空間内の direction。

result

:(出力)vec に直交する direction。

4.6.10  first_proj_axis  この関数は,入力データが完全な場合,arg を z_axis に垂直な平面に投影した 3 次

元の direction を生成する。arg は,暗黙値をもち,その場合,(1,0,0)を平面に投影した結果が得られる。

ただし,z_axis が(1,0,0)の場合には,arg の暗黙値として(0,1,0)が用いられる。arg が入力された z_axis

と同じ方向の場合には,戻り値を不定“?”とする。

EXPRESS

による定義

*)

FUNCTION first_proj_axis(z_axis, arg : direction) : direction;

   LOCAL

     x_axis  :  direction;

     v

:  direction;

     z    :  direction;

     x_vec

:  vector;

   END_LOCAL;


85

B 3700-42:1996 (ISO 10303-42:1994)

   IF (NOT EXISTS(z_axis)) OR (NOT EXISTS(arg)) OR (arg.dim <> 3) THEN

     x_axis  :=  ?;

   ELSE

     z_axis  :=  normalise(z_axis);

     IF  NOT  EXISTS(arg)  THEN

       IF  (z_axis  <>  direction([1.0,0.0,0.0]))  THEN

         v  :=  direction([1.0,0.0,0.0]);

       ELSE

         v  :=  direction([0.0,1.0,0.0]);

       END_IF;

     ELSE

       IF  ((cross_product(arg,z).magnitude)  =0.0)  THEN

         RETUR  (?);

       ELSE

         V  :=  normalise(arg);

       END_IF;

     END_IF;

     x_vec  :=  scalar_times_vector(dot_product(v,  z),  z_axis);

     x_axis  :=  vector_difference(v,  x_vec).orientation;

     x_axis  :=  normalise(x_axis);

   END_IF;

   RETURN(x_axis);

END_FUNCTION;

(*

引数定義

z_axis

:(入力)局所 Z 軸を定義する direction。

arg

:(入力)z_axis に平行でない direction。

x_axis

:(出力)法線が z_axis である平面上への arg の投影の方向にある direction。

4.6.11  second_proj_axis  この関数は,arg を z_axis に垂直な平面に投影し,更に x_axis に垂直な平面に投

影した正規化されたベクトルを返す。arg が不定“?”の場合には,ベクトル(0,1,0)を z_axis に投影した

ものが返される。

EXPRESS

による定義

*)

FUNCTION second_proj_axis(z_axis, x_axis, arg: direction) : direction;

   LOCAL

     y_axis  :  vector;

     v

:  direction;

     temp

: vector;

   END_LOCAL;

   IF  NOT  EXISTS(arg)  THEN


86

B 3700-42:1996 (ISO 10303-42:1994)

     v  :=  direction([0.0,1.0,0.0]);

   ELSE

     v  :=  arg;

   END_IF;

   temp  :=  scalar_times_vector(dot_product(v,  z_axis),  z_axis);

   y_axis

:=  vector_difference(v,  temp);

   temp  :=  scalar_times_vector(dot_product(v,  x_axis),  x_axis);

   y_axis

:=  vector_difference(y_axis,  temp);

   y_axis

:=  normalise(y_axis);

   RETURN(y_axis.orientation);

END_FUNCTION;

(*

引数定義

z_axis

:(入力)局所 Z 軸を定義する direction。

x_axis

:(入力)z_axis に平行でない direction。

arg

:(入力)y_axis の最初の近似として用いられる direction。

y_axis.orientation

:(出力)まず arg を z_axis を法線としてもつ平面上に投影し,その結果を x_axis を法線

としてもつ平面上に投影することで決定される direction。

4.6.12  cross_product  この関数は,入力された 2 個の direction のベクトル積,すなわち,外積を返す。3

次元の direction が入力され,かつ計算開始のときに正規化される。結果は,常に単位をもたない vector と

する。

入力された 2 個の direction が平行又は逆向きに平行の場合には,

orientation

か arg1 に等しく,

magnitude

が 0 の vector が返される。

EXPRESS

による定義

*)

FUNCTION cross_product(arg1, arg2 : direction) : vector;

   LOCAL

     mag  :  REAL;

     res  :  direction;

     v1,v2

:  LIST  [3:3]  OF  REAL;

     result  :  vector;

   END_LOCAL;

   IF (NOT EXISTS (arg1) OR (arg1.dim = 2)) OR

     (NOT EXISTS (arg2) OR (arg2.dim = 2)) THEN

     RETURN(?);

   ELSE

     BEGIN

       v1  :=  normalise(arg1).direction_ratios;

       v2  :=  normalise(arg2).direction_ratios;

       res.direction_ratios[1]  :=  (v1[2]*v2[3]  -  v1[3]*v2[2]);

       res.direction_ratios[2]  :=  (v1[3]*v2[1]  -  v1[1]*v2[3]);


87

B 3700-42:1996 (ISO 10303-42:1994)

       res.direction_ratios[3]  :=  (v1[1]*v2[2]  -  v1[2]*v2[1]);

       mag  :=  0.0;

       REPEAT  i  :=  1  T0  3;

         mag  :=  mag  +  res.direction_ratios[i]*res.direction_ratios[i];

       END_REPEAT;

       IF  (mag  >  0.0)  THEN

         result.orientation  :=  res;

         result.magnitude  :=  SQRT(mag);

       ELSE

         result.orientation  :=  arg1;

         result.magnitude  :=  0.0;

       END_IF;

       RETURN(result);

     END;

   END_IF;

END_FUNCTION;

(*

引数定義

arg1

:(入力)外積演算における第 1 の演算項を定義する direction。

arg2

:(入力)外積演算における第 2 の演算項を定義する direction。

result

:(出力)arg1 と arg2 との外積を表す vector。

4.6.13  dot_product  この関数は,入力された 2 個の direction のスカラ積,すなわち,内積を返す。2 次元

又は 3 次元の direction が入力され,かつ計算開始のときに正規化される。入力された 2 個の direction が異

なる次元数をもつ場合,又はいずれか一方が未定義の場合には,返されるスカラは,不定“?”とする。

EXPRESS

による定義

*)

FUNCTION dot_product(arg1, arg2 : direction) : REAL;

   LOCAL

     scalar  :  REAL;

     vec1,  vec2  :  direction;

     ndim  :  INTEGER;

   END_LOCAL;

   IF NOT EXISTS (arg1) OR NOT EXISTS (arg2) THEN

     scalar  :=  ?;

     (*

関数が不適切なデータで呼ばれた場合には,

結果として不定“

?

”が返される。

*)

   ELSE

     IF  (arg1.dim  <>  arg2.dim)  THEN

       scalar  :=  ?;

     (*

関数が不適切なデータで呼ばれた場合には,


88

B 3700-42:1996 (ISO 10303-42:1994)

結果として不定“

?

”が返される。

*

     ELSE

       BEGIN

         vec1

:= normalise(arg1);

         vec2

:= normalise(arg2);

         ndim

:= arg1.dim;

         scalar :=  0.0;

         REPEAT  i

:=  1  TO  ndim;

           scalar

:=  scalar  +

                       vec1.direction_ratios[i]*vec2.direction_ratios[i];

         END_REPEAT;

       END;

     END_IF;

   END_IF;

   RETURN(scalar);

END_FUNCTION;

(*

引数定義

arg1

:(入力)内積,すなわち,スカラ積演算における第 1 の vector を定義する direction。

arg2

:(入力)内積,すなわち,スカラ積演算における第 2 の vector を定義する direction。

scalar

:(出力)arg1 と arg2 との内積を表すスカラ。

4.6.14  normalise  この関数は,正規化して成分の 2 乗和を 1.0 とした vector 又は direction を返す。出力は,

入力引数と同じ型(同じ単位をもつ,direction 又は vector)とする。入力引数が未定義又は長さが 0 の場

合には,出力 vector は,不定“?”とする。

EXPRESS

による定義

*)

FUNCTION normalise(arg : vector_or_direction) : vector_or_direction;

   LOCAL

     ndim

: INTEGER;

     v

:  direction;

     result  :  vector_or_direction;

     vec  :  vector;

     mag  :  REAL;

   END_LOCAL;

   IF  NOT  EXISTS(arg)  THEN

     result  :=  ?;

     (*

関数が不適切なデータで呼ばれた場合には,

結果として不定“

?

”が返される。

*)

   ELSE

     ndim  :=  arg.dim;


89

B 3700-42:1996 (ISO 10303-42:1994)

     IF  'GEOMETRY_SCHEMA.VECTOR'  IN  TYPEOF(arg)  THEN

       BEGIN

         vec  :=  arg;

         v  :=  arg.orientation;

         IF  arg.magnitude  =  0.0  THEN

           RETURN(?);

         ELSE

           vec.magnitude  :=  1.0;

         END_IF;

       END;

     ELSE

       V  :=  arg;

     END_IF;

     mag  :=  0.0;

     REPEAT  i:=1  TO  ndim;

       mag  :=  mag  +  v.direction_ratios[i]*v.direction_ratios[i];

     END_REPEAT;

     IF  mag  >  0.0  THEN

       mag  :=  SQRT(mag);

       REPEAT  i  :=  1  TO  ndim;

         v.direction_ratios[i]  :=  v.direction_ratios[i]/mag;

       END_REPEAT;

       IF  'GEOMETRY_SCHEMA.VECTOR'  IN  TYPEOF(arg)  THEN

         Vec.orientation  :=  v;

         result  :=  vec;

       ELSE

         result  :=  v;

       END_IF;

     ELSE

       RETURN(?);

     END_IF;

   END_IF;

   RETURN  (result);

END_FUNCTION;

(*

引数定義

arg

:(入力)正規化する vector 又は direction。

result

:(出力)arg に平行で,長さが 1 の vector 又は direction。


90

B 3700-42:1996 (ISO 10303-42:1994)

4.6.15  scalar_times_vector  この関数は,入力ベクトルをスカラ倍したベクトルを返す。これは,入力と

してスカラと direction 又は vector とを受け取る。出力は,vector とするが,入力が vector の場合にはその

vector

と同じ単位をもち,入力が direction の場合には単位をもたない。入力引数が未定義の場合,返され

る vector は不定“?”とする。スカラが負の場合には,vector の orientation が反転する。

EXPRESS

による定義

*)

FUNCTION scalar_times_vector (scalar

: REAL; vec : vector_or_direction)

                         

:  vector;

   LOCAL

     v

:  direction;

     mag  :  REAL;

     result  :  vector;

   END_LOCAL;

   IF NOT EXISTS (scalar) OR NOT EXISTS (vec) THEN

     result  :=  ?;

     (*

関数が不適切なデータで呼ばれた場合には,

結果として不定“

?

”が返される。

*)

   ELSE

     IF 'GEOMETRY_SCHEMA.VECTOR' IN TYPEOF (vec) THEN

       v  :=  vec.orientation;

       mag

:=  scalar  *  vec.magnitude;

     ELSE

       v

:=  vec;

       mag

:=  scalar;

     END_IF;

     IF  (mag  <  0.0  )  THEN

       REPEAT  i  :=  1  TO  SIZEOF(v.direction_ratios);

         v.direction_ratios[i]  :=  -v.direction_ratios[i];

       END_REPEAT;

       mag  :=  -mag;

     END_IF;

     result.orientation  :=  normalise(v);

     result.magnitude   :=  mag;

   END_IF;

   RETURN  (result);

END_FUNCTION;

(*

引数定義

scalar

:(入力)積演算に用いられる実数。

vec

:(入力)スカラ倍される vector_or_direction。


91

B 3700-42:1996 (ISO 10303-42:1994)

result

:(出力)scalar と vec との積を表す vector。

4.6.16  vector_sum  この関数は,入力引数の和を返す。これは,入力された 2 個の vector 又は direction

のベクトル和を vector として返す。ここでは,direction を単位ベクトルとして扱う。2 個の入力引数は,

同じ次元数をもたなければならないが,direction 又は vector のいずれでもよい。両方の引数が vector の場

合には,それらは同じ単位でなければならない。和が 0 のベクトルになるときは,orientation が arg1 に等

しく,magnitude が 0 の vector を生成する。両方の入力引数が direction の場合には,結果は,単位をもた

ない。

EXPRESS

による定義

*)

FUNCTION vector_sum(arg1, arg2 : vector_or_direction) : vector;

   LOCAL

     result   

:  vector;

     res,  vec1,  vec2   :  direction;

     mag,  mag1,  mag2   :REAL;

     ndim      

:  INTEGER;

   END_LOCAL;

   IF ((NOT EXISTS (arg1)) OR (NOT EXISTS (arg2))) OR (arg1.dim <> arg2.dim)

       THEN

     result  :=  ?;

     (*

関数が不適切なデータで呼ばれた場合には,

結果として不定“

?

”が返される。

*

   ELSE

     BEGIN

       IF  'GEOMETRY_SCHEMA.VECTOR'  IN  TYPEOF(arg1)  THEN

         mag1

:= arg1.magnitude;

         vec1

:= arg1.orientation;

       ELSE

         mag1

:= 1.0;

         vec1

:= arg1;

       END_IF;

       IF  'GEOMETRY_SCHEMA.VECTOR'  IN  TYPEOF(arg2)  THEN

         mag2

:= arg2.magnitude;

         vec2

:= arg2.orientation;

       ELSE

         mag2

:= 1.0;

         vec2

:= arg2;

       END_IF;

       vec1  :=  normalise(vec1);

       vec2  :=  normalise(vec2);

       ndim  :=  SIZEOF(vec1.direction_ratios);


92

B 3700-42:1996 (ISO 10303-42:1994)

       mag  :=  0.0;

       REPEAT  i  :=  1  TO  ndim;

         res.direction_ratios[i]  :=  mag1*vec1.direction_ratios[i]  +

                             mag2*vec2.direction_ratios[i];

         mag  :=  mag  +  (res.direction_ratios[i]*res.direction_ratios[i]);

       END_REPEAT;

       IF  (mag  >  0.0)  THEN

         result.magnitude  :=  SQRT(mag);

         result.orientation  :=  res;

       ELSE

         result.magnitude  :=  0.0;

         result.orientation  :=  vec1;

       END_IF;

     END;

   END_IF;

   RETURN  (result);

END_FUNCTION;

(*

引数定義

arg1

:(入力)ベクトル和演算における第 1 の演算項を定義する direction。

arg2

:(入力)ベクトル和演算における第 2 の演算項を定義する direction。

result

:(出力)arg1 と arg2 とのベクトル和を表す vector。

4.6.17  vector_difference  この関数は,入力引数の差を(arg1−arg2)として返す。これは,入力された 2

個の vector 又は direction の差分ベクトルを vector として返す。ここでは,direction を単位ベクトルとして

扱う。2 個の入力引数は,同じ次元数をもたなければならないが,direction 又は vector のいずれでもよい。

両方の引数が vector の場合には,それらは同じ単位でなければならない。両方が direction の場合には,結

果は単位をもたない。差が 0 のベクトルになるときは,orientation が arg1 に等しく,magnitude が 0 の vector

を生成する。

EXPRESS

による定義

*)

FUNCTION vector_difference(arg1, arg2 : vector_or_direction) : vector;

   LOCAL

     result     :  vector;

     res,  vec1,  vec2  :  direction;

     mag,  mag1,  mag2  :  REAL;

     ndim      

:  INTEGER;

   END_LOCAL;

   IF ((NOT EXISTS (arg1)) OR (NOT EXISTS(arg2))) OR (arg1.dim <> arg2.dim)

       THEN

     result  :=  ?;


93

B 3700-42:1996 (ISO 10303-42:1994)

     (*

関数が不適切なデータで呼ばれた場合には,

結果として不定“

?

”が返される。

*)

   ELSE

     BEGIN

       IF  'GEOMETRY_SCHEMA.VECTOR'  IN  TYPEOF(arg1)  THEN

         mag1

:= arg1.magnitude;

         vec1

:= arg1.orientation;

       ELSE

         mag1

:= 1.0;

         vec1

:= arg1;

       END_IF;

       IF  'GEOMETRY_SCHEMA.VECTOR'  IN  TYPEOF(arg2)  THEN

         mag2

:= arg2.magnitude;

         vec2

:= arg2.orientation;

       ELSE

         mag2

:= 1.0;

         vec2

:= arg2;

       END_IF;

       vec1  :=  normalise  (vec1);

       vec2  :=  normalise  (vec2);

       ndim  :=  SIZEOF(vec1.direction_ratios);

       mag  :=  0.0;

       REPEAT  i  :=  1  TO  ndim;

         res.direction_ratios[i]  :=  mag1*vec1.direction_ratios[i]-

                                  mag2*vec2.direction_ratios[i];

         mag  :=  mag  +  (res.direction_ratios[i]*res.direction_ratios[i]);

       END_REPEAT;

       IF  (mag  >  0.0  )  THEN

         result.magnitude  :=  SQRT(mag);

         result.orientation  :=  res;

       ELSE

         result.magnitude  :=  0.0;

         result.orientation  :=  vec1;

       END_IF;

     END;

   END_IF;

   RETURN  (result);

END_FUNCTION;

(*

引数定義


94

B 3700-42:1996 (ISO 10303-42:1994)

arg1

:(入力)差分ベクトルの演算における第 1 の演算項を定義する direction。

arg2

:(入力)差分ベクトルの演算における第 2 の演算項を定義する direction。

result

:(出力)arg1 と arg2 との差分ベクトルを表す vector。

4.6.18  default_b_spline_knot_mult  この関数は,B-スプラインのパラメタ化のための,ノット多重度の整

数リストを返す。ノット多重度は,knot_type に依存する。

EXPRESS

による定義

*)

FUNCTION default_b_spline_knot_mult(degree, up_knots : INTEGER;

                                      uniform

:  knot_type)

                                           : LIST [2:?] OF INTEGER;

   LOCAL

     knot_mult : LIST [1:up_knots] OF INTEGER;

   END_LOCAL;

   REPEAT i := 1 TO up_knots;

     knot_mult[i]  :=  0;

   END_REPEAT;

   IF uniform = uniform_knots THEN

     REPEAT i := 1 TO up_knots;

       knot_mult[i]  :=  1;

     END_REPEAT;

   END_IF;

   IF uniform = quasi_uniform_knots THEN

     knot_mult[1]  :=  degree  +  1;

     knot_mult[up_knots]  :=  degree  +  1;

     REPEAT i := 2 TO (up_knots - 1);

       knot_mult[i]  :=  1;

     END_REPEAT;

   END_IF;

   IF uniform = piecewise_bezier_knots THEN

     knot_mult[1]  :=  degree  +  1;

     knot_mult[up_knots]  :=  degree  +  1;

     REPEAT i := 2 TO (up_knots-1);

       knot_mult[i]  :=  degree;

     END_REPEAT;

   END_IF;

   RETURN(knot_mult);

END_FUNCTION;

(*

引数定義

degree

:(入力)B-スプライン基底関数の次数を定める整数。


95

B 3700-42:1996 (ISO 10303-42:1994)

up_knots

:(入力)求めるノット多重度の個数を与える整数。

uniform

:(入力)ノット多重度の決定に必要な基底関数の型。

knot_mult

:(出力)ノット多重度の整数リスト。

4.6.19  default_b_spline_knots  この関数は,B-スプラインのパラメタ化のための,ノットベクトルを返す。

このノットベクトルは,knot_type に依存する。

EXPRESS

による定義

*)

FUNCTION default_b_spline_knots(degree,up_knots : INTEGER;

                            uniform

:  knot_type)

                                  :  LIST  [2:?]  OF  parameter_value;

   LOCAL

     knots

:  LIST[1:up_knots]  OF  parameter_value;

     ishift  :  INTEGER  :=  1;

   END_LOCAL;

   REPEAT i := 1 TO up_knots;

     knots[i]  :=  0;

   END_REPEAT;

   IF (uniform = uniform_knots) THEN

      ishift  :=  degree  +  1;

   END_if;

   IF (uniform = uniform_knots) OR

     (uniform  =  quasi_uniform_knots)  OR

     (uniform  =  piecewise-bezier-knots)  THEN

     REPEAT i := 1 TO up_knots;

       knots[i]  :=  i  -  ishift;

     END_REPEAT;

   END_IF;

   RETURN(knots);

END_FUNCTION;

(*

引数定義

degree

:(入力)B-スプライン基底関数の次数を定める整数。

up_knots

:(入力)求めるノット値の個数を与える整数。

uniform

:(入力)knots の決定に必要な基底関数の型。

knots

:(出力)ノットのパラメタ値のリスト。

4.6.20  default_b_spline_curve_weights  この関数は,大きさ 1.0 の重みを up_cp 個の実数型の配列に入れ

て返す。

EXPRESS

による定義

*)

FUNCTION default_b_spline_curve_weights(up_cp : INTEGER)


96

B 3700-42:1996 (ISO 10303-42:1994)

                                       :  ARRAY  [0:up_cp]  OF  REAL;

   LOCAL

     weights  :  ARRAY  [0:up_cp]  OF  REAL;

   END_LOCAL;

   REPEAT i := 0 TO up_cp;

     weights[i]  :=  1;

   END_REPEAT;

   RETURN(weights);

END_FUNCTION;

(*

引数定義

up_cp

:(入力)求める B-スプライン曲線の重み配列の添字の上限。

weights

:(出力)重みの実数配列。

備考

  この関数は,この規格では用いないが,アプリケーションプロトコルで用いるために,こ

こで定義する。

4.6.21  default_b_spline_surface_weights  この関数は,大きさ 1.0 の重みを 2 次元の実数型配列に入れて

返す。

EXPRESS

による定義

*)

FUNCTION default_b_spline_surface_weights(u_upper, v_upper: INTEGER)

                                   :  ARRAY  [0:u_upper]  OF

                                    ARRAY  [0:v_upper]  OF  REAL;

   LOCAL

     weights : ARRAY [0:u_upper] OF ARRAY [0:v_upper] OF REAL;

   END_LOCAL;

   REPEAT i := 0 TO u_upper;

     REPEAT j := 0 TO v_upper;

       weights[i][j]  :=  1;

     END_REPEAT;

   END_REPEAT;

   RETURN(weights);

END_FUNCTION;

(*

引数定義

u_upper

:(入力)求める B-スプライン曲面の 方向の重み配列の添字の上限。

v_upper

:(入力)求める B-スプライン曲面の

υ

方向の重み配列の添字の上限。

weights

:(出力)重みの 2 次元の実数配列。

備考

  この関数は,この規格では用いないが,アプリケーションプロトコルで用いるために,こ

こで定義する。


97

B 3700-42:1996 (ISO 10303-42:1994)

4.6.22  constraints_param_b_spline  この関数は,b_spline_curve 又は b_spline_surface(の一方向)のパラ

メタ化を調べ,次の制約をすべてみたす場合に TRUE を返す。

(a)  次数が 1 以上。

(b)  ノットの添字の上限が 2 以上。

(c)  制御点の添字の上限が次数以上。 
(d)  ノット多重度の和=次数+制御点の添字の上限+2。

(e)  最初及び最後のノットの多重度は,1 以上,かつ(次数+1)以下とする。

(f)  他のすべてのノットに関しては,ノットの多重度は,1 以上,かつ次数以下とする。 
(g)  ノットの値は,単調に増加する。

EXPRESS

による定義

*)

FUNCTION constraints_param_b_spline(degree, up_knots, up_cp : INTEGER;

                                  knot_mult  :  LIST  OF  INTEGER;

                                  knots  :  LIST  OF  parameter_value)  :  BOOLEAN;

   LOCAL

     result  :  BOOLEAN  :=  TRUE;

     k,l,sum : INTEGER;

   END_LOCAL;

   (*

ノット多重度の和を求める。

*)

   sum  :=  knot_mult[1];

   REPEAT i := 2 TO up_knots;

     sum  :=  sum  +  knot_mult[i];

   END_REPEAT;

   (*

すべての

B-

スプラインのパラメタ化についての制限を検査する。

*)

   IF (degree < 1) OR (up_knots < 2) OR (up_cp < degree) OR

        (sum <> (degree + up_cp + 2)) THEN

     result  :=  FALSE;

     RETURN(result);

   END_IF;

   k  :=  knot_mult[1];

   IF (k < 1) OR (k > degree + 1) THEN

     result  :=  FALSE;

     RETURN(result);

   END_IF;

   REPEAT i := 2 TO up_knots;

     IF (knot_mult[i] <1) OR (knots[i] <= knots[i-1]) THEN

       result  :=  FALSE;

       RETURN(result);

     END_IF;

     k  :=  knot_mult[i];


98

B 3700-42:1996 (ISO 10303-42:1994)

     IF (i < up_knots) AND (k > degree) THEN

       result  :=  FALSE;

       RETURN(result);

     END_IF;

     IF (i=up-knots) AND (k > degree + 1) THEN

       result  :=  FALSE;

       RETURN(result);

     END_IF;

   END_REPEAT;

   RETURN(result);

END_FUNCTION;

(*

引数定義

degree

:(入力)B-スプライン基底関数の次数を定める整数。

up_knots

:(入力)ノット多重度のリストの添字の上限を与える整数。

up_cp

:(入力)パラメタ値の整合性を検査する曲線又は曲面の制御点の添字の上限を与える整数。

knot_mult

:(入力)ノット多重度のリスト。

4.6.23  curve_weights_positive  この関数は,rational_b_spline_curve の制御点に関係付けられた重みを調べ,

これらの重みがすべて正であれば TRUE を返す。

EXPRESS

による定義

*)

FUNCTION curve_weights_positive(b: rational_b_spline_curve) : BOOLEAN;

   LOCAL

     result  :  BOOLEAN  :=  TRUE;

   END_LOCAL;

   REPEAT i := 0 TO b.upper_index_on_control_points;

     IF  b.weights[i]  <=  0.0  THEN

       result  :=  FALSE;

       RETURN(result);

     END_IF;

   END_REPEAT;

   RETURN(result);

END_FUNCTION;

(*

引数定義

b

:(入力)重みの値を検査する rational_b_spline_curve。

4.6.24  constraints_composite_curve_on_surface  この関数は,composite_curve_on_surface のセグメントか

ら参照される曲線が,すべて curve_on_surface であることを検査する。curve_on_surface は,bounded_curve

である composite_curve_on_surface 型を含む。

EXPRESS

による定義


99

B 3700-42:1996 (ISO 10303-42:1994)

*)

FUNCTION constraints_composite_curve_on_surface

               (c:  composite_curve_on_surface)  :  BOOLEAN;

   LOCAL

     n_segments  :  INTEGER  :=  SIZEOF(c.segments);

   END_LOCAL;

   REPEAT k := 1 TO n_segments;

     IF  (NOT('GEOMETRY_SCHEMA.PCURVE'  IN

          TYPEOF(c

composite_curve.segments[k].parent_curve))) AND

       (NOT('GEOMETRY_SCHEMA.SURFACE_CURVE'  IN

          TYPEOF(c

composite_curve.segments[k].parent_curve))) AND

       (NOT('GEOMETRY_SCHEMA.COMPOSITE_CURVE_ON_SURFACE'  IN

          TYPEOF(c

composite_curve.segments[k].parent_curve))) THEN

       RETURN  (FALSE);

     END_IF;

   END_REPEAT;

   RETURN(TRUE);

END_FUNCTION;

(*

引数定義

c

:(入力)検査する composite_curve_on_surface。

4.6.25  get_basis_surface  この関数は,曲線の basis_surface を,surface の集合として返す。曲線が

curve_on_surface

でない場合は,空集合を返す。

EXPRESS

による定義

*)

FUNCTION get_basis_surface (c : curve_on_surface) : SET[0:2] OF surface;

   LOCAL

     surfs

:  SET[0:2]  OF  surface;

     n

:  INTEGER;

   END_LOCAL;

   surfs  :=  [];

   IF 'GEOMETRY_SCHEMA.PCURVE'IN TYPEOF (c) THEN

     surfs  :=  [c

pcurve.basis_surface];

   ELSE

     IF 'GEOMETRY_SCHEMA.SURFACE_CURVE' IN TYPEOF (c) THEN

       n  :=  SIZEOF(c

surface_curve.associated_geometry);

       REPEAT  i  :=  1  TO  n;

       surfs  :=  surfs  +

              associated_surface(c

surface_curve.associated_geometry[i]);

       END_REPEAT;


100

B 3700-42:1996 (ISO 10303-42:1994)

     END_IF;

   END_IF;

   IF 'GEOMETRY_SCHEMA.COMPOSITE_CURVE_ON_SURFACE' IN TYPEOF (c) THEN

    (*  composite_curve_on_surface

 basis_surface

は,

すべてのセグメントの

 basis_surface

の積となる。

*)

     n  :=  SIZEOF(c

composite_curve_on_surface.segments);

     surfs  :=  get_basis_surface(c

composite_curve_on_surface.segments[1].parent_curve);

     IF  n  >  1  THEN

       REPEAT  i  :=  2  TO  n;

         surfs  :=  surfs  *

              get_basis_surface(c

composite_curve_on_surface.segments[i].parent_curve);

       END_REPEAT;

     END_IF;

   END_IF;

   RETURN(surfs);

END_FUNCTION;

(*

引数定義

c

:(入力)basis_surface を定める curve。

surfs

:(出力)basis_surface 又は c を含む曲面からなる集合。

4.6.26  surface_weights_positive  この関数は,rational_b_spline_surface の制御点に関係付けられた重みを

調べ,これらの重みがすべて正であれば TRUE を返す。

EXPRESS

による定義

*)

FUNCTION surface_weights_positive(b: rational_b_spline_surface) : BOOLEAN;

   LOCAL

     result        :  BOOLEAN  :=  TRUE;

   END_LOCAL;

   REPEAT i := 0 TO b.u_upper;

     REPEAT j := 0 TO b.v_upper;

       IF  (b.weights[i][j]  <=  0.0)  THEN

         result  :=  FALSE;

         RETURN(result);

       END_IF;

     END_REPEAT;

   END_REPEAT;

   RETURN(result);

END_FUNCTION;


101

B 3700-42:1996 (ISO 10303-42:1994)

(*

引数定義

b

:(入力)重みの値を検査する rational_b_spline_surface。

4.6.27  constraints_rectangular_composite_surface  この関数は,rectangular_composite_surface の属性に関

して,次の制約を検査する。

−  構成要素の曲面は,すべて rectangular_trimmed_surface 又は b_spline_surface のいずれかとする。

−  セグメントの配列の属性 transition は,discontinuous という値を含まない。ただし,最後の行又は

最後の列は,その限りではない。discontinuous の場合は,対応する方向に関して,曲面が閉じて

いないことを示す。

EXPRESS

による定義

*)

FUNCTION constraints_rectangular_composite_surface

          (s  :  rectangular_composite_surface)  :  BOOLEAN;

(* surface

の型を検査する。

*)

   REPEAT i := 1 TO s.n_u;

     REPEAT j := 1 TO s.n_v;

       IF  NOT(('GEOMETRY_SCHEMA.B_SPLINE_SURFACE'  IN  TYPEOF

                 (s.segments[i][j].parent_surface))  OR

              ('GEOMETRY_SCHEMA.RECTANGULAR_TRIMMED_SURHACE'  IN  TYPEOF

                 (s.segments[i][j].parent_surface)))  THEN

         RETURN(FALSE);

       END_IF;

     END_REPEAT;

   END_REPEAT;

   (*  transition_code

を検査する。最後の行及び最後の列は除く。

*)

   REPEAT i := 1 TO s.n_u-1;

     REPEAT j := 1 TO s.n_v;

       IF  s.segments[i][j].u_transition  =  discontinuous  THEN

         RETURN(FALSE);

       END_IF;

     END_REPEAT;

   END_REPEAT;

   REPEAT i := 1 TO s.n_u;

     REPEAT j := 1 TO s.n_v-1;

       IF  s.segments[i][j].v_transition  =  discontinuous  THEN

         RETURN(FALSE);

       END_IF;

     END_REPEAT;

   END_REPEAT;

   RETURN(TRUE);


102

B 3700-42:1996 (ISO 10303-42:1994)

END_FUNCTION;

(*

引数定義

s

:(入力)検査する rectangular_composite_surface。

4.6.28  list_to_array  この関数 list_to_array は,総称データ型のリストを,あらかじめ添字の範囲が決めら

れている配列に変換する。添字の要素数が元のリストの要素数と一致しない場合には,結果として不定“?”

が返される。この関数は,B-スプラインのエンティティ定義において用いられる制御点及び重みの配列を

作るために使われる。

EXPRESS

による定義

*)

FUNCTION list_to_array(lis : LIST [0:?] OF GENERIC : T;

                     low,u  :  INTEGER)  :  ARRAY[low:u]  OF  GENERIC  :  T;

   LOCAL

     n

:  INTEGER;

     res : ARRAY [low:u] OF GENERIC : T;

   END_LOCAL;

   n  :=  SIZEOF(lis);

   IF (n <> (u-low +1)) THEN

     RETURN(?);

   ELSE

     REPEAT i := 1 TO n;

       res[low+i-1]  :=  lis[i];

     END_REPEAT;

     RETURN(res);

   END_IF;

END_FUNCTION;

(*

引数定義

lis

:(入力)変換するリスト。

low

:(入力)出力配列の添字の下限を指定する整数。

u

:(入力)添字の上限を指定する整数。

res

:(出力)入力データから生成された配列。

4.6.29  make_array_of_array  この関数 make_array_of_array は,リストのリストから 2 次元の配列を作る。

この関数は,まず与えられた配列の大きさがリストの大きさと一致するかどうかを検査し,次にすべての

部分リストの要素の個数が一致することを確かめる。それらが一致しない場合には,結果として不定“?”

が返される。この関数は,B-スプライン曲面の制御点及び重みの配列を作るために使われる。

EXPRESS

による定義

*)

FUNCTION make_array_of_array(lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T;

                            low1,  u1,  low2,  u2  :  INTEGER):


103

B 3700-42:1996 (ISO 10303-42:1994)

                  ARRAY[low1:u1]  OF  ARRAY  [low2:u2]  OF  GENERIC  :  T;

   LOCAL

     n1,n2

:  INTEGER;

     res

: ARRAY[low1:u1] OF ARRAY [low2:u2] OF GENERIC : T;

     res1

:LIST[1:?] OF ARRAY [low2:u2] OF GENERIC : T;

   END_LOCAL;

   (*

リストの大きさと配列の大きさとの整合性を検査する。

*)

   n1  :=  SIZEOF(lis);

   n2  :=  SIZEOF(lis[1]);

   IF (n1 <> (u1-low1 + 1)) AND (n2 <> (u2 - low2 + 1)) THEN

     RETURN(?);

   END_IF;

   REPEAT i := 1 TO n1;

     IF  (SIZEOF(lis[i])  <>  n2)  THEN

       RETURN(?);

     END_IF;

   END_REPEAT;

   (*

部分配列のリストを作る。

*)

   REPEAT i := 1 TO n1;

     RESL[i]  :=  list_to_array(lis[i],low2,u2);

   END_REPEAT;

   res  :=  list_to_array(res1,low1,u1);

   RETURN(res);

END_FUNCTION;

(*

引数定義

lis

:(入力)変換するリストのリスト。

low1

:(入力)出力配列の第 1 の添字の下限を指定する整数。

u1

:(入力)第 1 の出力配列の添字の上限を指定する整数値。

low2

:(入力)出力配列の第 2 の添字の下限を指定する整数。

u2

:(入力)第 2 の出力配列の添字の上限を指定する整数値。

res

:(出力)整合性を検査した入力データから生成された 2 次元配列。これは,指定された大きさをもつ。

EXPRESS

による定義

*)

END_SCHEMA; -- geometry_schema

の終了

(*

5.

位相

(Topology)  次の EXPRESS 宣言は,topology_schema を開始し,必要な外部参照を明らかにする。

EXPRESS

による定義

*)


104

B 3700-42:1996 (ISO 10303-42:1994)

SCHEMA topology_schema;

   REFERENCE  FROM  geometry_schema;

   REFERENCE  FROM  representation_schema(representation_item);

(*

備考

1.  上で参照しているスキーマは,次の規格による。

geometry_schema

この規格の 4.

representation_schema JIS B 3700-43

2.  このスキーマの図式表現を

附属書

D.13D.15 に示す。

5.1

概要

  位相リソースモデルは,境界表現の立体モデルの考え方を基にしたものであるが,それ以外

の応用でも,接続関係を直接表現する方法が必要な場合に用いることかできる。

5.2

基本概念及び前提条件

  この規格で規定する vertex,edge などの位相エンティティは,これらの使

用法とは独立に定義する。各エンティティには最小限の制約だけが課され,それ以上の制約は,これらを

用いるエンティティによって,又はエンティティが用いられる前後関係によって定義される。これは,エ

ンティティを用いる際に,その前後関係及び使用法を制限しないことを意図している。

位相エンティティは,vertex を基本的なエンティティとして階層的に定義する。すなわち,その他の位

相エンティティは,vertex によって直接的に又は間接的に定義される。

エンティティは,それぞれか制約の集合をもつ。位相的な階層関係において上位のエンティティは,下

位のエンティティに制約を課すことができる。上位からみると,下位のエンティティに課される制約は,

上位から下位までの各エンティティに課される制約の総和となる。基本的な位相エンティティの構造は,

複雑さの増加する順に,vertex,edge,path,loop,face 及び shell となる。高水準に構造化された位相エン

ティティの open_shell 及び closed_shell は,connected_face_set の特殊な下位型とする。ここでは,ほかに

connected_edge_set

及び単純な connected_face_set を定義する。これら 2 種類のエンティティは,shell に対

する制約を課すことが適当でない位相データの集まりの交換に使われる。

poly_loop

は,直線状かつ共面の稜線のループとし,順序付けられた点のリストとして定義する。poly_loop

エンティティは,多面体境界表現モデルのデータ交換に用いられる。

エンティティに位相的及び幾何的な制約を加えて,位相モデルの一貫性を保証するために多くの関数を

用意する。

5.2.1

幾何との関連付け

  位相エンティティの多くは,特殊な下位型によって幾何データと結び付けるこ

とができる。境界表現立体モデルをデータを交換する際には,この結び付きが必要不可欠となる。vertex,

edge

及び face の特殊な下位型は,それぞれ vertex_point,edge_curve,face_surface とする。edge_curve 及び

face_surface

については,結び付けられたエンティティの幾何的な向きと位相的な向きとの関係も記録され

る。定義域の概念が,幾何を位相に関連付ける。point,curve 又は surface の定義域は,単純にその点(point)

曲線(curve)又は曲面(surface)とする。vertex,edge 又は face の定義域は,対応する点,曲線又は曲面

とする。loop 又は path の定義域は,その loop 又は path に含まれるすべての vertex 及び edge の定義域の和

とする(vertex_loop の場合を除き,定義域は,一つの曲線となる。

。shell の定義域は,その shell に含ま

れるすべての vertex,edge 及び face の定義域の和とする(closed_shell 又は open_shell の場合,定義域は,

曲面となる。

。立体モデルの定義域は,それが占める空間の領域とする。SET 又は LIST の定義域は,そ

の SET 又は LIST の要素の定義域の和とする。この規格を利用して,あるエンティティに関して連結性,

有限性などの幾何的概念を議論する場合,その概念は,エンティティの定義域に適用されるものとする。

定義域を記述する際の主要な概念は,多様体の考え方とする。直観的にいうと,定義域が 次元ユーク


105

B 3700-42:1996 (ISO 10303-42:1994)

リッド空間と局所的に区別不能であれば,その定義域は,d-多様体とする。このことは,次元数が定義域

の各点で同じであり,定義域には自己干渉が許されないことを意味する。この規格では,curve 及び surface

は,自己干渉を含むことができるので,多様体とは限らない。しかし,curve 又は surface の中で,edge,

face

のような位相エンティティの定義域に対応する部分は,多様体でなければならない。

この規格では,

“多様体”

“境界”及び“境界付き多様体”は,通常の数学的な定義と同一とする。境界

付き多様体が多様体と異なるのは,境界が存在してもよい点にある。

1-

多様体は,自己干渉しない曲線となり,その終了点を含まない。1-多様体の例として,実数直線及び

単位円がある。

“Y”字型をした図形及び単位閉区間は,1-多様体ではない。2-多様体は,境界曲線を含ま

ず,自己干渉しない曲面となる。2-多様体の例として,単位球面及び開円盤 {(x,y,0):x

2

y

2

<1}  がある。

閉円盤 {(x,y,0):x

2

y

2

≦1}  は,多様体ではない。稜線及び稜線列は,定義域が存在するならば,1-多様体

となる。面及び閉シェルは,定義域が存在するならば,2-多様体となる。

自己干渉しない曲線は,境界付き 1-多様体となる。閉円盤 {(x,y,0):x

2

y

2

≦1}  は,境界付き 2-多様体

となる。開シェルは,定義域か存在するならば,境界付き 2-多様体となる。多様体立体境界表現又は多面

体多様体境界表現の定義域は,境界付き 3-多様体となる。

境界付き d-多様体の境界は,

d−1)-多様体となる。例えば,曲線の境界は,その曲線に含まれる 0∼2

個の終了点の集合となる。閉円盤 {(x,y,0):x

2

y

2

≦1}  の境界は,単位円となる。開シェルの定義域の境

界は,シェルの穴を囲むループの集合となる。多様体立体境界表現又は多面体多様体境界表現の境界は,

境界シェルの集合の定義域となる。

境界付き多様体である曲線及び曲面は,開又は閉に分類できる。この規格において,用語“開”及び“閉”

が曲線又は曲面に対して用いられた場合,点集合位相幾何学における“開集合”又は“閉集合”の概念と

混同してはならない。

“閉曲面”という用語は,閉,連結,かつ向き付け可能な 2-多様体の通常の定義と

同一とする。閉曲面の例として,球面及び輪環面がある。閉シェルは,定義域が存在するならば,閉曲面

となる。開曲面の例として,無限平面及び 1 個以上の穴をもった曲面がある。開シェルは,定義域が存在

する場合,開曲面となる。

現実に製作可能なすべての閉曲面は,向き付け可能となる。面の定義域は,常に平面に埋込み可能であ

り,したがって,向き付け可能となる。開曲面は,向き付け可能とは限らない。例えば,メビウスの輪は,

開曲面である。更に,この規格の定義では,開でも閉でもない多様体がある。クラインのつぼ(壷)が,

その例である。クラインの壼は,有限で境界が存在しないか,向き付け可能ではないので,空間を 2 個の

領域に分割しない。しかし,この規格で定義される開シェルの定義域は,向き付け可能でなければならな

い。

用語“種数”は,エンティティの位相的な性質の分類に用いる整数値を指す。この規格では 2 種類の種

数を定義する。

edge

及び vertex からなるグラフとみなせるエンティティ,例えば,loop,path 又は wire_shell について

は,種数は,グラフ理論における“サイクル階数”と同値とする。グラフ理論における“種数”とは異な

る。直観的には,種数は,グラフにおける独立サイクルの数を示す。例えば,1 個の頂点だけからなり,n

個の自己ループからなるグラフの種数は,となる。

閉曲面 の種数とは,に位相同型な曲面を生成するために球面に加えなければならないハンドルの個

数とする。例えば,球面の種数は 0,輪環体の種数は 1 である。種数は,代数的位相幾何学における“曲

面の種数”と同一とする。閉曲面にハンドルを加えることは,その曲面によって囲まれた 3 次元の領域に

貫通穴を開ける操作となる。この操作は,2 個の円盤を切り抜き,それらの境界を円柱状の管でつなぐ操


106

B 3700-42:1996 (ISO 10303-42:1994)

作とみることかできる。

“ハンドル”は,

“穴”とは異なる。この規格では,用語“穴”は,2 次元の曲面

に穴をあけるという直観的な概念に対応する。

曲面の種数の定義は,次のように向き付け可能な開曲面に拡張できる。定義域の穴をすべて円盤でふさ

ぐと,閉曲面が得られる。この閉曲面については,既に種数が定義されている。この閉曲面の種数を開曲

面の種数とする。

5.2.2

パラメタ空間幾何との関連付け

  ここでの基本的な仮定として,定義される位相は,モデル空間の

位相とする。曲線及び点の幾何は,パラメタ空間中で定義することができる。しかし,一般には,パラメ

タ空間における位相構造は,その基礎となるモデル空間の位相構造とは必ずしも一致しない。face とその

基礎となる surface との関係が,その例である。

パラメタ空間系は,幾何を位相に関連させる方法論において実空間系とは異なっている。典型的にはパ

ラメタ空間系は,異なったパラメタ空間曲線をそれぞれの edge use(すなわち,oriented_edge)に関連させ

る。

(edge use の方法の)既知の稜線に関連したパラメタ空間曲線の実空間のすべての同じ点を表現する。

各パラメタ空間曲線は,それぞれ異なったパラメタ空間で定義される。そのパラメタ空間は,その稜線が

境界付ける面の基礎をなす曲面とする。多様体立体では,すべての edge の幾何は,その edge を境界とし

てもつ二つの face のそれぞれに対して 1 回ずつ,計 2 回定義される。

参考

 edge

use

とは,稜線(edge)が曲面やループから参照される際に,その用いられる方向を

明示するための補助的なデータである。これは,立体モデルなどで,稜線に関する隣接関

係を効率的に表現するのに適する。立体モデルの内部表現に用いる場合,一つの稜線には,

方向が異なる一対の edge use が対応する。

各 edge use にパラメタ空間曲線を関連付けることは,自然に縮退稜線(すなわち,実空間では長さが 0

の稜線)の使用につながる。例えば,パラメタ空間系が,実空間で三角形である面を,パラメタ空間では

長方形で表現したいとする。このための直接的な方法は,三角形面の頂点の一つを縮退稜線(しかし,二

つの頂点をもつ。

)として表現することである。そうすれば,実空間の稜線とモデル空間の稜線との間に一

対一の対応がとれる。縮退稜線は,実空間では長さ 0 であるが,パラメタ空間では,0 を超える長さをも

つ。縮退稜線は,円錐の頂点のような特異点のまわりに境界を設けるために用いてもよい。

実空間系は,各 edge use にパラメタ空間曲線を関連付けさせず,縮退稜線も許さない。パラメタ空間系

の位相の扱いは,実装上の都合であるため,この規格では,実空間位相を使う。パラメタ空間系における

一意な情報は,

(edge use を使用しなくても)幾何を用いることによって得られる。

5.2.2.1

edge_curve

のパラメタ空間曲線との関連付け

  パラメタ空間曲線と一つの edge_curve とを関連付

けるために用いることのできる技術は,次のとおりとする。

(a) edge_curve の属性 edge_geometry は,一つの pcurve を直接参照してもよい。そのとき,その edge_curve

にはただ一つの pcurve が関連付けられる。

(b) edge_curve の属性 edge_geometry は,surface_curve,又は surface_curve の下位型を参照することができ

る。そのとき,その edge_curve には,その surface_curve の属性 associated_geometry で参照された(1

∼2 個の)pcurve が関連付けられる。その surface_curve の属性 curve_3d によって参照された曲線も,

その edge_curve に関連付けられる。しかし,その曲線は,パラメタ空間曲線ではありえず,その edge

のモデル空間での幾何を表現する。

(c) edge_curve の属性 edge_geometry は,(pcurve ではない)曲線を参照することができる。そのとき,そ

の edge_curve には 0 回以上の pcurve が関連付けられる。その pcurve とは,当該の曲線を属性 curve_3d

として参照する surface_curve が,属性 associated_geometry として参照するものである。


107

B 3700-42:1996 (ISO 10303-42:1994)

このために,関数 edge_curve_pcurves が EXPRESS で形式的に定義されている。この関数は,ある特定の

edge

に関連付けられているすべてのパラメタ空間曲線を決定するために用いることができる。

備考

1.  パラメタ空間曲線を理解しなくてもよい実空間系の応用のためには,パラメタ空間系は,上

(c)だけを用いるのがよい。そうすれば,pcurve を無視しても実空間系では,すべての

edge_curve

は,それに関連付けられた正しい幾何をもつ。

2.  ある edge_curve の pcurve が与えられたとき,どの oriented_edge にその pcurve が関連付けら

れるかを求めるとする。それは,その oriented_edge の囲む面の face_geometry が,その pcurve

の basis_surface にインスタンス等価なものを見つける問題となる。ある edge_curve に関連づ

けられた 2 個以上の pcurve が,

同じ曲面のパラメタ空間で定義されているとする。

そのとき,

pcurve

が関連付けられる oriented_edge を決定するためには,パラメタ空間での pcurve の接続

関係を調べる必要がある。

5.2.3

グラフ,サイクル及び通過

  グラフの連結構成要素とは,そのグラフの連結部分集合であり,それ

より大きな連結部分集合に属さないものとする。

連結構成要素の個数をグラフの多重度と呼び,

M

で表す。

したがって,グラフが連結であるための必要十分条件は,M=1 となる。

グラフの各構成要素は,始め及び終わりを同じ頂点にして,次のように完全に通過できる。すべての稜

線は,各方向に 1 回ずつ計 2 回通過され,すべての頂点は,その頂点を用いる稜線の数と同じ回数だけ通

過される。

(稜線+稜線の通過する方向)を単位と考えれば,それぞれ一意に定まる(稜線+方向)の組合

せは,グラフの通過においてそれぞれ 1 回だけ現れる。グラフを通過すると,頂点及び(稜線+方向)単

位は,交互に現れて閉サイクルを構成する。その閉サイクルは,1 個以上存在する。

記号 は,グラフの種数を表す。これは直観的には,グラフにおける独立サイクルの個数となる[専門

的には,は,グラフの基本群(fundamental group)の階数となる。

すべてのグラフは,次のオイラー式を満たす。

(

ν

ε

)

−(MG)=0  (1)

ここで,

ν

及び

ε

は,グラフにおける一意な頂点及び稜線の個数とする。

備考

  グラフを通過し,及び を計算するのに,次のグラフ通過アルゴリズム(

附属書

E4.

照)を用いることかできる。

(a)  及び を 0 にする。

(b)  (まだ通っていない)任意の頂点から始める。まだ通っていない頂点がなければ停止

する。当該の頂点に通過済みの印を付け,に 1 を加える。その頂点から任意の稜線

を通過し,その稜線に通過方向の印を付ける。

(c)  稜線 PQ を通過して頂点 に到達したところで,次の操作を行う。

−  その頂点に初めて到達した場合には,稜線に頂点 の初進入稜線の印を付ける。

初進入稜線の印は,稜線がその方向で 1 回だけしか選ばれないようにするための

ものである。

−  頂点 に通過済みの印を付ける。

−  稜線 PQ にとって最初の通過であり,かつ頂点 が通過済みの場合には,に 1

を加える。

−  頂点 から出る稜線を次の規則に従って選ぶ。

(1)  頂点 から出て行く方向で既に通過した稜線は,選べない。

(2)  1 を満たす稜線で,の初進入稜線以外のものを選ぶ。


108

B 3700-42:1996 (ISO 10303-42:1994)

(3)  2 を満たす稜線がない場合には,初進入稜線を選ぶ。

−  稜線か選ばれたら,その稜線を通過し,更にその稜線に通過方向の印を付ける。

(d)  (c)で稜線が選ばれた場合には(c)を行い,稜線が 1 個も選ばれなかった場合には(b)を行

う。

5.3

topology_schema

の型定義

5.3.1

shell  shell は,より複雑なモデルを構築する際の参考のためのもので,シェルとしての特徴をもつ

下位型を集めた型とする。これは,領域を境界付けするのに通常用いられる d=0,1,又は 2 に固定された次

元数の連結オブジェクトとする。shell の定義域は,存在する場合,自身の境界を含み,かつ 0≦

Ξ

<∞と

なる。次元数 0 の shell は,単一の頂点から構成されるグラフによって表現される。vertex は,関連付けら

れた edge をもってはならない。次元数 1 の shell は,次元数 1 の連結グラフによって表現される。次元数

2

の shell は,edge に沿って接続する面によって構成される位相エンティティとする。その定義域は,存在

する場合,連結された,向き付け可能な境界を伴った 2-多様体とする。すなわち,閉又は開のいずれでも

よく,自己干渉しない,連結,向き付けかつ有限な曲面となる。

EXPRESS

による定義

*)

TYPE shell = SELECT

   (vertex_shell,

    wire_shell,

    open_shell,

    closed_shell);

END_TYPE;

(*

5.3.2

reversible_topology_item  reversible_topology_item は,向きを反転する操作に関連したすべての位

相表現要素を表す。これは,関数 conditional_reverse によって用いられる。

EXPRESS

による定義

*)

TYPE reversible_topology_item = SELECT

   (edge,

    path,

    face,

    face_bound,

    closed_shell,

    open_shell);

END_TYPE;

(*

5.3.3

list_of_reversible_topology_item  list_of_reversible_topology_item は,reversible_topology_item のリス

トを定義する。これは,関数 list_of_topology_reversed によって用いられる。

EXPRESS

による定義

*)

TYPE list_of_reversible_topology_item =


109

B 3700-42:1996 (ISO 10303-42:1994)

                          LIST  [0:?]  of  reversible_topology_item;

END_TYPE;

(*

5.3.4

set_of_reversible_topology_item  set_of_reversible_topology_item は,reversible_topology_item の集合

を定義する。これは,関数 set_of_topology_reversed によって用いられる。

EXPRESS

による定義

*)

TYPE set_of_reversible_topology_item

        =  SET  [0:?]  of  reversible_topology_item;

END_TYPE;

(*

5.3.5

reversible_topology  reversible_topology は,すべての reversible_topology_item の型を明らかにする。

これは,関数 topology_reversed によって用いられる。

EXPRESS

による定義

*)

TYPE reversible_topology = SELECT

   (reversible_topology_item,

   list_of_reversible_topology_item,

   set_of_reversible_topology_item);

END_TYPE;

(*

5.4

topology_schema

のエンティティ定義

  ここては,topology_schema で使われるすべてのエンティテ

ィ定義を定義する。

5.4.1

topological_representation_item  topological_representation_item は,オブジェクトの表現を構成する

エンティティの位相,すなわち,接続関係を表現する。topological_representation_item は,位相スキーマに

おけるすべての representation_item の上位型とする。

EXPRESS

による定義

*)

ENTITY topological_representation_item

   SUPERTYPE OF (ONEOF(vertex, edge, face_bound, face, vertex_shell,

                   wire_shell,  connected_edge_set,  connected_face_set,

                    (loop  ANDOR  path)))

   SUBTYPE  OF  (representation_item);

END_ENTITY;

(*

非形式的要件

IP1

各 topological_representation_item について,その topological_representation_item が直接的に又は再帰的

に参照する vertex_point,edge_curve 及び face_surface の集合を考える(この集合には oriented_edge 又は face

は含まないが,それらの元の向き付けされていない edge 及び face は含む。)。この場合,集合から異な

る二つの要素をとったとき,その定義域は,互いに交差してはならない。


110

B 3700-42:1996 (ISO 10303-42:1994)

5.4.2

vertex  vertex(頂点)は,点に対応する位相の構成要素とする。その次元数及び大きさは,0 とす

る。頂点の定義域は,存在する場合,次元実空間 R

m

における点とする。これは,下位型の vertex_point

によって表現される。

EXPRESS

による定義

*)

ENTITY vertex

   SUBTYPE  OF  (topological_representation_item);

END_ENTITY;

(*

非形式的要件

IP1

vertex

の次元数は,0 とする。これは,vertex の基本的な性質とする。

IP2

vertex

の大きさは,0 と定義する。

5.4.3

vertex_point  vertex_point は,point として定義された幾何をもつ vertex とする。

EXPRESS

による定義

*)

ENTITY vertex_point

   SUBTYPE  OF  (vertex,  geometric_representation_item);

     vertex_geometry  :  point;

END_ENTITY;

(*

属性定義

vertex_geometry

:vertex の幾何空間における位置を定義する幾何の点。

非形式的要件

IP1

vertex

の定義域は,その vertex_geometry の定義域であるとして形式的に定義される。

5.4.4

edge  edge(稜線)は,二つの vertex 間の連結に対応する位相の構成要素とする。より抽象的には,

それは,二つの vertex 間の論理的な関係を表すとしてもよい。edge の定義域は,存在する場合,R

m

におけ

る有限かつ自己干渉しない開曲線,すなわち,連結 1 次元多様体とする。edge の境界は,二つの vertex と

し,これらは異なっている必要はない。edge は,1 番目の vertex から 2 番目の vertex へ通過する方向に向

き付けされる。二つの vertex が同一の場合,その edge は,自己ループとする。edge の定義域は,その境

界を含まず,かつ 0<

Ξ

<∞とする。edge には,その edge を座標空間内に配置するため幾何の curve を関

連付けることができる。これは,下位型の edge_curve によって表現する。この curve は,edge の定義域内

においては有限とし,かつ自己干渉してはならない。edge はグラフであるので,その多重度 及びグラフ

の種数 G

e

はグラフ通過アルゴリズムによって決定される。M=

ε

=1

であるので,式(1)は,この場合,次の

とおりになる。

ν

−(2−G

e

)=0 (2)

ここで,

ν

=1

又は 2 とし,並びに,G

e

=1

又は 0 とする。

特に,位相としての edge は,次項を満足しなければならない。

− edge は,二つの vertex をもち,

|

E[V]|=2

−  それらの vertex は,異なっている必要はなく,


111

B 3700-42:1996 (ISO 10303-42:1994)

1

≦|E{V}|≦2

−  式(2)が成り立つ。

|

E{V}|

−2+G

e

=0

11

edge_curve

EXPRESS

による定義

*)

ENTITY edge

   SUPERTYPE  OF  (ONEOF(edge_curve,  oriented_edge))

   SUBTYPE  OF  (topological_representation_item);

   edge_start  :  vertex;

   edge_end  : vertex;

END_ENTITY;

(*

属性定義

edge_start

:edge の開始点(vertex)。

edge_end

:edge の終了点(vertex)。edge_start 及び edge_end の両方に同一の vertex を用いることかできる。

非形式的要件

IP1:edge の次元数は,1 とする。

IP2:edge の大きさは,有限とし,かつ 0 でないとする。 
5.4.5

edge_curve  edge_curve は,edge の特殊な下位型とし,完全に定義された幾何をもつ。その幾何は,

edge

が curve と関連付けられることによって定義される。その curve は,境界がなくてもよい。位相の方

向と幾何の方向とは,逆でもよい。edge の方向と curve の方向とが一致するか逆であるかを示すために,

識別子(same_sense)が使われる。このブール値は,curve の方向と edge の方向が,一致するか(TRUE)

又は逆であるか(FALSE)のいずれかを示す。edge の vertex に関連付けられたあらゆる幾何は,edge の幾

何と整合しなければならない。複数の edge は,同じ curve を参照することかできる。

EXPRESS

による定義


112

B 3700-42:1996 (ISO 10303-42:1994)

*)

ENTITY edge_curve

   SUBTYPE  OF  (edge,geometric_representation_item);

   edge_geometry

:  curve;

   same_sense  :  BOOLEAN;

END_ENTITY;

(*

属性定義

edge_geometry

:edge の形状及び空間的な配置を定義する curve。この curve は,境界がなくてもよく,edge

の vertex によって暗黙にトリムされる。これは,edge の定義域を定める。

same_sense

:このブール型のフラグは,edge の向きと edge の幾何を定義する curve の向きとが,同じであ

るか(TRUE),又は逆であるか(FALSE)のいずれかを示す。edge の向きは,edge の開始 vertex から edge

の終了 vertex への向きとする。curve の向きは,パラメタの増加する方向とする。

備考

  属性の実例については,

11 参照。

非形式的要件

IP1:edge_curve の定義域は,その edge_geometry の定義域を vertex でトリムしたものとして形式的に定義

される。この定義域は,vertex を含まない。

IP2:edge_curve の大きさは,有限とし,かつ 0 でないとする。

IP3:edge_curve は,多様体とする。

IP4:edge_curve は,弧状連結とする。 
IP5:edge_start は,edge の定義域に含まれない。

IP6:edge_end は,edge の定義域に含まれない。

IP7:vertex の幾何は,edge の幾何と整合しなければならない。 
5.4.6

oriented_edge  oriented_edge は,別の edge から構成される edge とする。これは,その向きと元の

edge

の向きとが一致するか否かを示すブール型の向きフラグをもつ。向きに関する属性を除けば,

oriented_edge

は,元の edge と等価になる。

備考

  立体モデリングシステムは,一般に,edge の“edge use”,すなわち,“通過”を表現する

エンティティをもつ。この“edge use”エンティティでは,各 edge がそれぞれの方向に 1

回ずつ計 2 回通過されなければならない,という多様体立体の要件を明示的に表現する。

“edge use”の機能は,edge の下位型の oriented_edge で用意される。

EXPRESS

による定義

*)

ENTITY oriented_edge

   SUBTYPE  OF  (edge);

   edge_element

:  edge;

   orientation :  BOOLEAN;

DERIVE

   SELF

edge.edge_start : vertex := boolean_choose (SELF.orientation,

                                       SELF.edge_element.edge_start,

                                       SELF.edge_element.edge_end);


113

B 3700-42:1996 (ISO 10303-42:1994)

   SELF

edge.edge_end   : vertex := boolean_choose (SELF.orientation,

                                       SELF.edge_element.edge_end,

                                       SELF.edge_element.edge_start);

WHERE

   WR1: NOT ('TOPOLOGY_SCHEMA.ORIENTED_EDGE' IN TYPEOF (SELF.edge_element));

END_ENTITY;

(*

属性定義

edge_element

:この oriented_edge を構成するために用いられるエンティティ edge。

orientation

:ブール型の属性。TRUE の場合,位相上の向きは,edge_element の開始 vertex から終了 vertex

への向きに一致する。

edge_start

:oriented_edge の開始 vertex。これは,orientation を考慮して edge_element の vertex から導出され

る。

edge_end

:oriented_edge の終了 vertex。これは,orientation を考慮して edge_element の vertex から導出され

る。

形式的要件

WR1

edge_element

は,oriented_edge であってはならない。

5.4.7

path  path は,oriented_edge の順序付けられた集まりからなる位相エンティティとする。ここで,

各 edge の edge_start の vertex は,その一つ手前の edge の edge_end の vertex に一致する。path は,最初の

oriented_edge

の edge_start から最後の oriented_edge の edge_end の順に順序付けられる。oriented_edge のブ

ール値 orientation は,edge の方向が path の方向に一致するか(TRUE)

,又は逆の方向であるか(FALSE)

のいずれかを示す。

個々の edge は,個々の path によって 1 回だけ参照できる。

edge

は,複数の path によって参照できる。edge は,path と独立に存在できる。

EXPRESS

による定義

*)

ENTITY path

   SUPERTYPE OF (ONEOF(open_path, edge_loop, oriented_path))

   SUBTYPE  OF  (topological_representation_item);

   edge_list  :  LIST  [1:?]  OF  UNIQUE  oriented_edge;

WHERE

   WR1:  path_head_to_tail(SELF);

END_ENTITY;

(*

属性定義

edge_list

:path を構成するために接合されるエンティティ oriented_edge のリスト。

形式的要件

WR1:各 oriented_edge の終了 vertex は,その次の edge の開始 vertex と同じでなければならない。

非形式的要件

IP1:path の次元数は,1 とする。


114

B 3700-42:1996 (ISO 10303-42:1994)

IP2

path

は,弧状連結とする。

IP3:共通する vertex を除き,path の edge は,互いに交差しない。 
IP4:path の大きさは,有限かつ 0 でない。

IP5:いかなる path も,同じ edge_element で,かつ同じ orientation をもつ oriented_edge を二つ含むことは

ない。

5.4.8

oriented_path  oriented_path は,別の path から構成された path で,構成された path の向きと元の

path

の向きが一致するか否かを示すブール型の向きフラグをもつ。向きに関する点を除けば,oriented_path

は,元の path と等価とする。

EXPRESS

による定義

*)

ENTITY oriented_path

   SUBTYPE  OF  (path);

   path_element

:  path;

   orientation :  BOOLEAN;

DERIVE

   SELF

path.edge_list : LIST [1:?] OF UNIQUE oriented_edge

                        :=  conditional_reverse(SELF.orientation,

                                   SELF.path_element.edge_list);

WHERE

   WR1: NOT ('TOPOLOGY_SCHEMA.ORIENTED_PATH' IN TYPEOF (SELF.path_element));

END_ENTITY;

(*

属性定義

path_element

:oriented_path を構成するために用いられるエンティティ path。

orientation

:ブール型の属性。TRUE の場合,位相上の向きは,path_element の向きに一致する。

edge_list

:oriented_path を構成する oriented_edge のリスト。このリストは,属性 orientation を考慮して

path_element

から導出される。

形式的要件

WR1

path_element

は,oriented_path であってはならない。

5.4.9

open_path  open_path は,path の特殊な下位型とし,path の通過に当たって各 vertex は,1 回だけ

現れる。特に,開始 vertex と終了 vertex とは異なる。open_path は,M=1 かつ G

p

=0

となるグラフなので,

オイラー式(1)は,この場合,次のとおりになる。

(

ν

ε

)

−1=0 (3)

ここで,

ν

及び

ε

は,それぞれ,path における一意な vertex 及び edge の数とする。特に,path の位相の属性

は,次の制約を満足しなければならない。

− path 中の edge は一意とする。

(

P)[E]=(P){E}

−  リスト((P)[E])[V]において,二つの vertex は,ただ 1 回だけ現れ,その他の vertex は,ちょうど 2

回現れる。

− path のグラフの種数は,0 とする。


115

B 3700-42:1996 (ISO 10303-42:1994)

−  式(3)は,次のように解釈される。

|((

P)[E]){V}|

−|(P){E}|−1=0

EXPRESS

による定義

*)

ENTITY open_path

   SUBTYPE  OF  (path);

DERIVE

   ne : INTEGER := SIZEOF(SELF

path.edge_list);

WHERE

   WR1:  (SELF

path.edge_list[1].edge_element.edge_start) :<>:

                        (SELF

path.edge_list[ne].edge_element.edge_end);

END_ENTITY;

(*

属性定義

ne

:上位型である path の edge_list 中の要素数。

形式的要件

WR1

最初の edge の開始 vertex は,最後の edge の終了 vertex に一致してはならない。

非形式的要件

IP1

open_path

では,各 vertex は,1 回だけ現れる。このことは,vertex のリストを edge データから構成

する場合,最初及び最後の vertex はリスト中に 1 回だけ現れ,その他の vertex は 2 回現れることを意味す

る。

5.4.10  loop  loop は,単独の vertex,又は,同一の vertex を始まりかつ終わりとする連結された edge,

oriented_edge

若しくは直線セグメントを並べることによって構成される位相エンティティとする。loop の

次元数は,0 又は 1 とする。0 次元 loop の定義域は,単独の点とする。1 次元 loop の定義域は,連結され

た oriented_curve とするか,多様体でなくてもよい。loop は,サイクルであるので,その始まりかつ終わ

りの点の配置は,任意とする。loop の定義域は,その境界を含み,かつ 0≦

Ξ

<∞とする。

loop

は,単独の vertex によって,oriented_edge の順序付けられた集まりによって,又は点の順序付けら

れた集まりによって表現される。

loop

はグラフであるので,及びグラフの種数 G

l

は,グラフ通過アルゴリズムによって決定されるとし

てよい。M=1 であるので,オイラー式(1)は,この場合,次のとおりになる。

(

ν

ε

l

)

−(1−G

l

)=0  (4)

ここで,

ν

及び

ε

l

は,それぞれ,loop 中の一意な vertex 及び oriented_edge の数とし,G

l

は,loop の種数と

する。

EXPRESS

による定義

*)

ENTITY loop

   SUPERTYPE OF (ONEOF(vertex_loop, edge_loop, poly_loop))

   SUBTYPE  OF  (topological_representation_item);

END_ENTITY;

(*


116

B 3700-42:1996 (ISO 10303-42:1994)

非形式的要件

IP1:loop の大きさは,有限とする。vertex_loop の場合には 0 となる。 
IP2:loop は,開始 vertex と終了 vertex とが一致する閉(位相)曲線を表す。

5.4.11  vertex_loop  vertex_loop は,単独の vertex からなる種数 0 の loop とする。vertex は,vertex_loop

と独立に存在できる。位相データは,次の制約を満足しなければならない。

−  式(4)5.4.10 参照)を満足しなければならない。

|(

L){V}|

−1=0

EXPRESS

による定義

*)

ENTITY vertex_loop

   SUBTYPE  OF  (loop);

   loop_vertex  :  vertex;

END_ENTITY;

(*

属性定義

loop_vertex

:loop 全体を定義する vertex。

非形式的要件

IP1:vertex_loop の大きさ及び次元数は,ともに 0 とする。

IP2:vertex_loop の種数は,0 とする。

5.4.12  edge_loop  edge_loop は,大きさが 0 でない loop で,開始 vertex と終了 vertex が同一の path とす

る。その定義域は,存在する場合,閉曲線となる。edge_loop は,自己に重なる部分があってもよい。

EXPRESS

による定義

*)

ENTITY edge_loop

   SUBTYPE  OF  (loop,  path);

DERIVE

   ne : INTEGER := SIZEOF(SELF

path.edge_list);

WHERE

   WR1

:  (SELF

path.edge_list[1].edge_start) :=:

         (SELF

path.edge_1ist[ne].edge_end);

END_ENTITY;

(*

属性定義

ne

:上位型である path の edge_list の要素数。

形式的要件

WR1:最初の edge の開始 vertex は,最後の edge の終了 vertex と同一でなければならない。これによって

path

が閉じ,loop となることが保証される。

非形式的要件

IP1:edge_loop の種数は,1 以上でなければならない。

IP2:次のオイラー式[5.4.10 の式(4)参照]を満足しなければならない。


117

B 3700-42:1996 (ISO 10303-42:1994)

(vertex の数)+種数−(edge の数)=1

IP3:同じ edge_loop によって,同じ向きに 2 回以上参照される edge はない。 
5.4.13  poly_loop  poly_loop は,空間内の平面領域を境界付ける直線 edge をもつ loop とする。poly_loop

は,種数 1 の loop とする。ここで,loop は,loop の vertex を構成するように順序付けられ,かつ共面な

point

の集まりによって表現される。loop は,その集まりの中で,point とその後に続く point とを結ぶ直線

セグメントで構成される。最後のセグメントは,その集まりの最後の point から最初の point に向かう。loop

の方向は,直線セグメントの方向となる。エンティティ edge_loop と異なり,poly_loop の edge は,polygon

を構成する point によって暗黙に定義される。

備考

  このエンティティは,主に多面体境界表現モデルの効率的なデータ交換を可能にするため

のものである。

poly_loop

は,次の位相上の制約に従わなければならない。

− loop の種数は,1 とする。

−  式(4)(5.4.10 参照)を満足しなければならない。

|(

L){V}|

−|(L){E

l

}|=0

EXPRESS

による定義

*)

ENTITY poly_loop

   SUBTYPE  OF  (loop,geometric_representation_item);

   polygon : LIST [3:?] OF UNIQUE cartesian_point;

END_ENTITY;

(*

属性定義

polygon

:loop を定義する point のリスト。リストの中に重複する point はない。

非形式的要件

IP1:poly_loop を定義する polygon 中のすべての point は,共面でなければならない。

IP2:poly_loop の暗黙の稜線は,互いに交差してはならない。暗黙の稜線は,polygon 中の連続する point

を結ぶ直線とする。

備考

  poly_loop は,暗黙に作られる oriented_edge 及び vertex をもつ。例えば,A 及び B が polygon

リスト中の連続する二つの point の場合,向きの値が TRUE で vertex_point A から

vertex_point B

への暗黙な oriented_edge が存在する。shell や境界表現のような,より高い水

準のエンティティが edge の用法に対する検査を要求したとき,例えば,point B から point A

に向かう orientation が TRUE の直線 oriented_edge と,

A

から B へ向かう orientation が FALSE

の oriented_edge とか等しいと認識できることを仮定する。

5.4.14 face_bound

face_bound

は,face を境界付けるために用いることを意図した loop とする。

EXPRESS

による定義

*)

ENTITY face_bound

   SUBTYPE  OF(topological_representation_item);

   bound :  loop;

   orientation :  BOOLEAN;


118

B 3700-42:1996 (ISO 10303-42:1994)

END_ENTITY;

(*

属性定義

bound

:face の境界として用いられる loop。

orientation

:face を境界付けるために用いられる場合の loop の向きが,最初に定義されたときと同じであ

るか(TRUF),又は逆であるか(FALSE)のいずれかを示す。orientation が FALSE の場合,face におい

て用いられるときには,構成要素の oriented_edge の向きは,すべて反転しているとみなす。

5.4.15  face_outer_bound  face_outer_bound は,face_bound の特殊な下位型であって,face の外周の境界を

定義するという意味ももつ。face の二つ以上の境界が face_outer_bound となってはならない。

EXPRESS

による定義

*)

ENTITY face_outer_bound

SUBTYPE OF (face_bound);

END_ENTITY;

(*

5.4.16  face  face(面)は,次元数 2 の位相エンティティで,直感的には,ループによって境界付けられ

た曲面の一部に対応する。その定義域は,存在する場合,R

m

において向き付けられた連結な有限の 2-多様

体とし,ハンドルをもたないが,穴をもってもよい。各穴は,loop によって境界付けられる。face の幾何

の定義域は,存在する場合,face の境界を含まず,かつ 0<

Ξ

<∞とする。face は,その境界ループによっ

て表現される。各境界ループは,face_bound として定義される。face は,少なくとも一つの境界をもたな

ければならない。各境界は,互いに異なっていなければならず,更に交差してはならない。場合によって

は,一つの loop が,face の“外周”loop として,下位型の face_outer_bound を用いて区別されることがあ

る。この場合,face の定義域を平面内に埋め込む方法が設定され,face の他の境界ループが外周 loop の“内

側”となる。face の定義域は,弧状連結であるので,いかなる内部 loop も,他の loop を内側に含んではな

らない。これは,平面内にどのような埋込みをしようと関係なく,真とする。

幾何の surface か face に関連付けられることがある。これは,下位型の face_surface を用いて明示的に行

うか,又は,face か poly_loop で定義される場合には,暗黙に行ってよい。後者の場合,surface は,poly_loop

の point を含む平面とする。いずれの場合にも,外積 n×が face の内部を指すように,位相上の法線 は,

face

に関連付けされる。ここで は,境界ループの接線とする。すなわち,法線 が上方を指していると

考えた場合,

各 loop は,

face

の上方から見て反時計回りに face を回る。

各 loop には,

エンティティ face_bound

を介してブール型のフラグが関連付けされる。ブール型のフラグは,loop の方向が face の法線に対して正

しく向き付けされているか(TRUE)

,又は反転しているか(FALSE)のいずれかを示す。

face_surface

である face の場合,位相上の法線 n は,基礎となる surface の法線及びブール型の属性

same_sense

から定義される。この位相上の法線から,上に示した外積の規則によって,face の内部が loop

のどちら側にあるかを決定できる。poly_loop によって定義されるような暗黙の平面の場合,一意に定まる

曲面の法線が存在しないので,状況が異なる。face 及びその境界ループか平面上にあるので,外周 loop は,

あいまいさなく求めることができる。face が有限でなければならないので,face の内部は,外周 loop の内

側に存在し,かつ他の loop の外側に存在する。これらの条件及び指定された loop の向きによって,位相

上の法線 は,上に示した外積の規則を用いて定義される。与えられた face のすべての poly_loop の向き

は,同じ を導かなければならない。


119

B 3700-42:1996 (ISO 10303-42:1994)

face

の loop によって参照される edge 及び vertex は,グラフを構成する。このグラフの個々の loop は,

連結構成要素とする。このグラフに関するオイラー式(1)は,次のとおりになる。

(

ν

ε

)

−(L

å

L

i

l

i

G

1

)

(

)=0  (5)

ここで,

l

i

G

は,番目の loop のグラフの種数とする。より明確には,次の位相上の制約が満足されなけれ

ばならない。

− loop は,一意とする。

(

F){L}=(F)[L]

−  リスト((F)[L])[E]中で,個々の edge は,3 回以上は現れない。

−  各 oriented_edge は,一意とする。

((

F)[E]){E

l

}=((

F)[L])[E

l

]

−  式(5)は,次を満足しなければならない。

|(((

F)[L

e

]){

E}){V}|

+|((F)[L

υ

]){

V}|

−|((F)[L]){E}|−|(F)[L]|+

Σ

G

l

=0

EXPRESS

による定義

*)

ENTITY face

   SUPERTYPE OF (ONEOF(face_surface, subface, oriented_face))

   SUBTYPE  OF  (topological_representation_item);

   bounds : SET[1:?] OF face_bound;

WHERE

   WR1:  NOT(mixed_loop_type_set(list_to_set(list_face_loops(SELF))));

   WR2: SIZEOF(QUERY(temp <* bounds | 'TOPOLOGY_SCHEMA.FACE_OUTER_BOUND' IN

                                                TYPEOF(temp)))  <=  1;

END_ENTITY;

(*

属性定義

bounds

:face の境界。これらのうち,たかだか一つが face_outer_bound とする。

備考

  ある種の閉曲面又は部分閉曲面の場合,一意な外周の境界を求めることはできない。

形式的要件

WR1:face の loop のいずれかが poly_loop である場合,face のすべての loop は,poly_loop でなければなら

ない。

WR2:bounds のうち,たかだか一つが face_outer_bound 型とする。

非形式的要件

IP1:いかなる edge も,face から 3 回以上参照されない。同一方向では,2 回以上参照されない。 
IP2:face の異なる face_bound は,共通の vertex をもたない。

IP3:幾何が存在する場合,同一 face 上の異なる loop は,互いに交差してはならない。

IP4:face は,次のオイラー式[式(5)参照]を満足しなければならない。

(vertex の数)-(edge の数)-(loop の数)+(loop の種数の和)=0

IP5:bounds の中で参照される各 loop は,一意とする。


120

B 3700-42:1996 (ISO 10303-42:1994)

5.4.17  face_surface  face_surface は,face の下位型とし,その幾何は,関連付けされた surface によって定

義される。face によって用いられる曲面の部分は,開円盤として平面内に埋込み可能でなければならない。

このとき face に穴があってもよい。しかし,face にその境界ループの edge 及び vertex とを加えたものは,

平面内に埋込み可能でなくてよい。例えば,球面又は輪環体の全体が覆われる場合である。face と幾何曲

面との双方で法線の方向を定義しているので、surface の法線が face の法線の方向に一致するか(TRUE)

又は逆であるか(FALSE)のいずれかを示すために,ブール型のフラグ(向きの属性)が用いられる。face

の loop に含まれるあらゆる構成要素に関連付けされた幾何は,surface の幾何と整合しなければならない。

すなわち,すべての vertex_point 及び edge_curve の定義域が,face の幾何である surface に含まれなければ

ならない。surface は,複数の face から参照されてもよい。

EXPRESS

による定義

*)

ENTITY face_surface

   SUBTYPE  OF(face,geometric_representation_item);

   face_geometry

:  surface;

   same_sense  :  BOOLEAN;

END_ENTITY;

(*

属性定義

face_geometry

:face 内部の形状を定義する surface。この surface は,境界のないものでもよい。face の定義

域は,この surface 及び継承された属性である SELF\face.bounds 中の境界ループによって定義される。

same_sense

:このフラグは,曲面の法線の向きが face の位相上の法線の向きに一致するか(TRUE),又は

逆であるか(FALSE)のいずれかを示す。

非形式的要件

IP1:face_surface の定義域は,その face_geometry の定義域を loop によってトリムしたものとして形式的

に定義される。この定義域は,境界ループを含まない。

IP2:face_surface の大きさは,有限かつ 0 でない。 
IP3:face_surface は,多様体とする。

IP4:face_surface は,弧状連結とする。

IP5:face_surface の曲面の種数は,0 とする。 
IP6:loop は,face の定義域に含まれない。

IP7:loop の幾何は,face の幾何と整合しなければならない。これは,face_surface を境界付ける loop を定

義するのに用いられるあらゆる edge_curve 又は vertex_point が face_geometry 上になければならないことを

意味する。

IP8:face の loop は,互いに交差してはならない。

5.4.18  oriented_face  oriented_face は,face の下位型とし,oriented_face の向きが face_element において定

義されている元の向きに一致するか否かを示す付加的なブール型の向きフラグをもつ。

EXPRESS

による定義

*)

ENTITY oriented_face

   SUBTYPE  OF  (face);


121

B 3700-42:1996 (ISO 10303-42:1994)

   face_element

:  face;

   orientation :  BOOLEAN;

DERIVE

   SELF

face.bounds : SET[1:?] OF face_bound

           :=  conditional_reverse(SELF.orientation,SELF.face_element.bounds);

WHERE

   WR1: NOT ('TOPOLOGY_SCHEMA.ORIENTED_FACE' IN TYPEOF(SELF.face_element));

END_ENTITY;

(*

属性定義

face_element

:この oriented_face を構成するために用いられるエンティティ face。

orientation

:このエンティティの位相上の向きと face_element の位相上の向きとの関係。これが TRUE の場

合,位相上の向きは face_element の向きに一致する。

bounds

:oriented_face の bounds は,その方向を反転できる orientation を考慮して,face_element の bounds

から導出される。

形式的要件

WR1:face_element は,oriented_face であってはならない。 
5.4.19  subface  subface は,face 又は他の subface の定義域の一部とする。

subface

に関する位相上の制約は,face に関するものと同じとする。

EXPRESS

による定義

*)

ENTITY subface

   SUBTYPE  OF  (face);

   parent_face  :  face;

WHERE

   WR1:  NOT  (mixed_loop_type_set(list_to_set(list_face_loops(SELF))  +

               list_to_set(list_face_loops(parent_face))));

END_ENTITY;

(*

属性定義

parent_face

:SELF\face.bounds によって定義される subface を含む face(又は subface)。

形式的要件

WR1:subface 中の loop の型は,エンティティ parent_face 中の loop の型に一致しなければならない。

非形式的要件

IP1:subface の定義域は,parent_face の定義域を subface の loop によってトリムしたものとして形式的に

定義される。

IP2:subface のすべての loop は,parent_face の定義域と parent_face の境界ループの定義域との和に含まれ

なければならない。

5.4.20  connected_face_set  connected_face_set は,face,境界の edge 及び境界の vertex の定義域の和が連

結であるような face の集合とする。


122

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS

による定義

*)

ENTITY connected_face_set

   SUPERTYPE  OF(ONEOF(closed_she11,  open_shell))

   SUBTYPE  OF(topological_representation_item);

   cfs_faces : SET[1:?] OF face;

END_ENTITY;

(*

属性定義

cfs_face

:共通の edge 又は vertex を介して弧状連結である face の集合。

非形式的要件

IP1

face

及びその境界 loop の定義域の和は,弧状連結でなければならない。

5.4.21  vertex_shell  vertex_shell は,単独の vertex_loop からなる shell とする。vertex_shell_extent は,一意

とする。vertex_loop は,一つの vertex_shell によってだけ用いられることができる。

vertex_loop

は,vertex_shell と独立に存在できる。

EXPRESS

による定義

*)

ENTITY vertex_shell

   SUBTYPE  OF  (topological_representation_item);

   vertex_shell_extent  :  vertex_loop;

END_ENTITY;

(*

属性定義

vertex_shell_extent

:この shell の大きさを定める単独の vertex_loop。

非形式的要件

IP1

vertex_shell

の大きさ及び次元数は,ともに 0 とする。

IP2

vertex_shell

の種数は,0 とする。

5.4.22  wire_shell  wire_shell は,次元数 1 の shell とする。wire_shell は,vertex 及び edge から構成される

グラフとみなすことができる。しかし,グラフとしては直接的に表現されず,loop の集合として間接的に

表現される。wire_shell は,グラフを構成するこれらの loop の vertex と edge との和からなる。wire_shell

の定義域は,存在する場合,通常,多様体でない。

wire_shell

の構造には,次の二つの制限がある。

(a)  グラフは,全体として連結でなければならない。

(b)  グラフ中の各 edge は,loop の集合からちょうど 2 回参照されなければならない。

備考

1. wire_shell には,主に二つの応用が考えられる。 
2.  任意の連結グラフは,グラフ通過アルゴリズムによって,条件(b)に従う単独の loop として示

すことができる。このようなグラフは領域の境界となってもよい。

3. closed_shell の face によって参照される loop の集合は,自動的に条件(b)に従うが,連結であ

る必要はない。しかし,これらの loop が連結グラフ,すなわち,wire_shell を形成するよう

に,closed_shell の face を分割することは,常に可能とする。したがって,wire_shell は,


123

B 3700-42:1996 (ISO 10303-42:1994)

closed_shell

の“1 次元骨格構造”を表現できる。

グラフの種数を G

w

とし,連結構成要素の数を M=1 とすると,グラフのオイラー式(1)は,次のとおりにな

る。

(

ν

ε

)

−(1−G

w

)=0 (6)

より明確には,次の位相上の制約を満足しなければならない。

− loop は,一意とする。

(

S

w

){

L}=(S

w

)[

L]

−  各 edge は,二つの loop によって参照されるか,又は単独の loop によって 2 回参照されなければ

ならない。すなわち,リスト((S

w

)[

L])[E]

中において,各 edge は,ちょうど 2 回現れる。

|((

S

w

)[

L])[E]|=2|((S

w

)[

L]){E}|

−  各 oriented_edge は,一意とする。

((

S

w

)[

L]){E

l

}=((

S

w

)[

L])[E

l

]

−  式(6)を満足しなければならない。

|(((

S

w

)[

L]){E}){V}|-|((S

w

)[

L]){E}|

−1+G

w

=0

EXPRESS

による定義

*)

ENTITY wire_shell

   SUBTYPE  OF  (topological_representation_item);

   wire_shell_extent : SET [1:?] OF loop;

WHERE

   WR1:  NOT  mixed_loop_type_set(wire_shell_extent);

END_ENTITY;

(*

属性定義

wire_shell_extent

:shell を定義する loop のリスト。

形式的要件

WR1

wire_shell

を構成する loop では,poly_loop と他の型の loop とが混在してはならない。

非形式的要件

IP1

wire_shell

の次元数は,1 とする。

IP2

wire_shell

の大きさは,有限でかつ 0 を超える。

IP3:各 edge は,wire_shell 中において,反対の向きにちょうど 2 回現れる。

IP4:オイラー式を満足しなければならない。 
IP5:wire_shell_extent を定義する loop は,共通する edge 又は vertex を除き,互いに交差しない。

5.4.23  open_shell  open_shell は,次元数 2 の shell とする。その定義域は,存在する場合,有限かつ連結

な向き付けされた境界付 2-多様体であって,閉曲面でない。それは,一つ以上の穴かその中に存在する

closed_shell

として考えることかできる。open_shell の定義域は,0<

Ξ

<∞とする。open_shell は,その定義

域がハンドルをもつことができるので,face に比べて機能的に,より一般的である。

この shell は,face(oriented_face であってもよい。

)の集まりによって定義される。各 face の向きは,

orientation

を考慮すると,次に定義する shell の法線に一致しなけれはならない。orientation は,oriented_face

のブール型の属性として直接与えることかできる場合,又は shell の要素が属性 orientation のない face の場


124

B 3700-42:1996 (ISO 10303-42:1994)

合には,暗黙によって TRUE とすることができる。

次に示す,open_shell に関する組合せの制限及びその定義域に関する幾何の制限は,非形式的要件と合

わせて,open_shell に関連付けされたあらゆる定義域が向き付け可能多様体であることを保証する。

−  各 face への参照は,一意とする。

− open_shell は,少なくとも一つの face をもつ。

− face は,複数の open_shell 中に存在してもよい。

open_shell

の境界は,その face の face_bound(loop)によって 1 回だけ参照される edge 及びそれらの edge

の vertex から構成される。open_shell の定義域は,存在する場合,その face のすべての edge 及び vertex を

含む。

備考

  この定義は,face の定義域の定義と微妙に異なっている。face の定義域は,その境界を含

まない。例えば,孤立した点又は直線セグメントは,face の定義域から除かれるが,

open_shell

の定義域からは除かれない(次に示す

β

を計算するアルゴリズム参照。

open_shell

の曲面の種数及び位相上の法線は,その定義域内の穴を埋めて得られる closed_shell と同じもの

とする。位相上の法線は,face の orientation を考慮すると,face の法線からも導出することができる。

open_shell

は,次のオイラー式を満足する。これは,連結で向き付け可能な曲面に関する最も一般的な形

式のオイラー式とする。

(

ν

ε

L+2F)−(2−2H

β

)=0 (7)

ここで,

ν

ε

L

l

,及び は,それぞれ,異なる vertex,edge,face_bound 及び face の数とする。は曲面

の種数とし,

β

は穴の数とする。

β

は,face の境界を定義する edge 及び vertex のグラフから,次の方法によ

って直接求めることができる。

− face の face_bound によって 2 回参照されるすべての edge をグラフから削除する。

− edge と関連付けされていないすべての vertex を削除する。

−  結果として生じるグラフの種数

β

を計算する。

曲面の種数 が既知の場合は,式(7)が成り立つかどうかを確かめられる。通常,曲面の種数は,既知で

ないので,式(7)又はこれと等価な式を用いて種数を計算することになる。は,非負の整数であるので,

open_shell

が正当である必要条件として次の不等式が導かれる。

ν

ε

L

l

β

=

偶数,かつ≦2−2 (8)

より明確には,次の位相上の制約を満足しなければならない。

− shell の各 face は,一意とする。

(

S

o

){

F}=(S

o

)[

F]

− shell の各 face_bound は,一意とする。

((

S

o

)[

F]){L

l

}=((

S

o

)[

F])[L

l

]

− shell の各 oriented_edge は,一意とする。

(((

S

o

)[

F])[L

l

]){

E}=(((S

o

)[

F])[L

l

])[

E

l

]

−  リスト(((S

o

)[

F])[L

l

])[

E

l

]

中で,1 回だけ現れる edge が少なくとも一つ存在し,3 回以上現れる edge

は存在しない。1 回だけ現れる edge は,shell の境界上に存在する。

−  オイラー条件(8)及び式(7)を満足しなければならない。

|((((

S

o

)[

F]){

e

l

}){E}){V}|

+|(((S

o

)[

F]){

v

l

}){V}|

−|(((S

o

)[

F]){L

l

}){

E}|

−|((S

o

)[

F])[L

l

]|

+B=偶数,かつ≦2−2|(S

o

)[

F]|

2

−2HB=|((((S

o

)[

F]){

e

l

}){E}){V}|

+|(((S

o

)[

F]){

v

l

}){V}|


125

B 3700-42:1996 (ISO 10303-42:1994)

−|(((S

o

)[

F]){L

l

}){

E}|

−|((S

o

)[

F])[L

l

]|

+2|(S

o

)[

F]

EXPRESS

による定義

*)

ENTITY open_shell

   SUBTYPE  OF  (connected_face_set);

END_ENTITY;

(*

属性定義

SELF

\connected_face_set.cfs_faces:oriented_face を含んでもよい face の集合であって,open_shell を構成

する。

非形式的要件

IP1:いかなる edge も,face の loop から少なくとも 1 回は参照されるが,3 回以上は参照されない。

IP2:各 oriented_edge の参照は,一意とする。

IP3:いかなる edge も,三つ以上の face から参照されてはならない。 
IP4:shell の異なる face は,互いに交差しないか,edge 又は vertex を共有してもよい。

IP5:異なる edge は,互いに交差しないが,vertex を共有してもよい。

IP6:オイラー式を満足しなければならない。 
IP7:open_shell は,向き付けされた弧状連結である 2-多様体でなければならない。

IP8:open_shell は,少なくとも一つの穴をもつ。

IP9:open_shell の各 face への位相上の法線は,open_shell の位相上の法線と矛盾してはならない。 
5.4.24  oriented_open_shell  oriented_open_shell は,別の open_shell から構成される open_shell であって,

構成された open_shell の向きが元の open_shell の向きに一致するか否かを示すブール型の向きフラグをも

つ。向きを除けば,oriented_open_shell は,元の open_shell と等価とする。

EXPRESS

による定義

*)

ENTITY oriented_open_shell

   SUBTYPE  OF  (open_shell);

   open_shell_element :  open_shell;

   orientation :  BOOLEAN;

DERIVE

   SELF

connected_face_set.cfs_faces : SET [1:?] OF face

                                   :=  conditional_reverse(SELF.orientation,

                                       SELF.open_shell_element.cfs_faces);

WHERE

   WR1:  NOT  ('TOPOLOGY_SCHEMA.ORIENTED_OPEN_SHELL'

                IN  TYPEOF  (SELF.open_shell_element));

END_ENTITY;

(*

属性定義

open_shell_element

:oriented_open_shell の face を定義する open_shell。


126

B 3700-42:1996 (ISO 10303-42:1994)

orientation

:定義される oriented_open_shell の向きと,参照される open_shell_element の向きとの関係。

cfs_faces

:oriented_open_shell の face の集合。open_shell_element の face から,場合によっては向きを反転

することで得られる。

形式的要件

WR1:open_shell_element の型は,oriented_open_shell であってはならない。 
5.4.25  closed_shell  closed_shell は,次元数 2 の shell であって,通常 R

3

における領域の境界として用いら

れる。closed_shell は境界をもたず,大きさは有限かつ 0 でない。この shell が座標空間 R

3

中で定義域をも

つ場合,空間は二分され,一方が有限の連結領域となり,他方が無限の連結領域となる。この場合,shell

の位相上の法線は,有限の領域から無限の領域の向きに定義される。

この shell は,face の集まりとして定義される。このとき face は,oriented_face であってもよい。orientation

を考慮すると,各 face の向きは,上で定義した shell の法線に一致しなければならない。orientation は,

oriented_face

のブール型の属性として直接与えるか,又は shell の要素が属性 orientation のない face の場合

には暗黙によって TRUE とするか,のいずれかとする。

closed_shell

に関する組合せの制限及びその定義域に関する幾何の制限は,closed_shell に関連付けされた

あらゆる定義域が向き付け可能閉多様体であることを保証する。closed_shell の定義域は,存在する場合,

向き付けされた連結閉 2-多様体とする。これは,種数 H(ただし H≧0)の輪環体と位相的に等価である。

H

は,shell の曲面の種数として参照される。種数 の shell が座標空間 R

3

中に定義域をもつ場合,その内

部の有限な領域は,個の貫通穴をあけた球と位相的に等価になる。

この場合,穴はないので,曲面オイラー式(7)で

β

=0

とできる。open_shell の場合と同様に,曲面の種数 H

は,既知でなくてもよいが,0 以上の整数でなければならない。したがって,正当な closed_shell の必要条

件(十分条件でない)は,次のとおりとなる。

ν

ε

L

l

=

偶数,かつ≦2−2 (9)

より明確には,次の位相上の制約を満足しなければならない。

− shell の各 face は,一意とする。

(

S

c

){

F}=(S

c

)[

F]

− shell の各 face_bound は,一意とする。

((

S

c

)[

F]){L

l

}=((

S

c

)[

F])[L

l

]

− shell の各 oriented_edge は,一意とする。

(((

S

c

)[

F])[L

l

]){

E

l

}=(((

S

c

)[

F])[L

l

])[

E

l

]

− shell の各 edge は,ちょうど二つの face_bound に使われるか,又は一つの face_bound に 2 回使わ

れる。

|(((

S

c

)[

F])[L

l

]){

E

l

}|=2|(((

S

c

)[

F])[L

l

]){

E}|

すなわち,リスト(((S

c

)[

F])[L

l

])[

E]

中で,各 edge は,ちょうど 2 回現れる。

−  オイラーの条件(9),場合によっては式(7)を満足しなければならない。

2

−2H=|((((S

c

)[

F]){

e

l

}){E}){V}|+|(((S

c

)[

F]){

v

l

}){V}|

−|(((S

c

)[

F]){L

l

}){

E}|

−|((S

c

)[

F])[L

l

]|

+2|(S

c

)[

F]|

|((((

S

c

)[

F]){

e

l

}){E)}){V}|

+|(((S

c

)[

F]){

v

l

}){V}|

−|(((S

c

)[

F]){L

l

}){

E}|

−|((S

c

)[

F])[L

l

]|=

は偶数,かつ≦2−2|(S

c

)[

F]|

EXPRESS

による定義

*)


127

B 3700-42:1996 (ISO 10303-42:1994)

ENTITY closed_shell

   SUBTYPE  OF  (connected_face_set);

END_ENTITY;

(*

属性定義

SELF

\connected_face_set.cfs_faces:closed_shell を定義する face(oriented_face を含む。)の集合。

非形式的要件

IP1:あらゆる edge は,face に属する loop からちょうど 2 回参照される。 
IP2:各 oriented_edge の参照は,一意とする。

IP3:いかなる edge も三つ以上の face から参照されてはならない。

IP4:shell の異なる face は,互いに交差しないか,edge 又は vertex を共有してもよい。 
IP5:異なる edge は,互いに交差しないが,vertex を共有してもよい。

IP6:各 face の参照は,一意とする。

IP7:shell の loop には,poly_loop と他の種類の loop とが混在してはならない。 
IP8:closed_shell は,向き付けされた弧状連結である多様体でなければならない。

IP9:オイラー式を満足しなければならない。

IP10:closed_shell の各 face への位相上の法線は,closed_shell への位相上の法線と矛盾してはならない。

これは,各 face への位相上の法線が存在する場合,orientation を考慮すると,closed_shell によって境界付

けられる有限の領域から外側の無限の領域を向くことを意味する。

5.4.26  oriented_closed_shell  oriented_closed_shell は,別の closed_shell から構成される closed_shell であっ

て,構成された closed_shell の向きが元の closed_shell の向きに一致するか否かを示すブール型の向きフラ

グをもつ。

oriented_closed_shell

は,元の closed_shell と等価とするが,向きが反対であってもよい。

EXPRESS

による定義

*)

ENTITY oriented_closed_shell

   SUBTYPE  OF  (closed_shell);

   closed_shell_element

:  closed_shell;

   orientation :  BOOLEAN;

DERIVE

   SELF

connected_face_set.cfs_faces : SET [1:?] OF face

                                    :=conditional_reverse(SELF.orientation,

                                      SELF.closed_shell_element.cfs_faces);

WHERE

   WR1:  NOT  ('TOPOLOGY_SCHEMA.ORIENTED_CLOSED_SHELL'

                INTYPE  OF  (SELF.closed_shell_element));

END_ENTITY;

(*

属性定義

closed_shell_element

:oriented_closed_shell の face を定義する closed_shell。


128

B 3700-42:1996 (ISO 10303-42:1994)

orientation

:定義される oriented_closed_shell の向きと,参照される closed_shell_element の向きとの関係。

cfs_faces

:oriented_closed_shell の face の集合。closed_shell_element の face から,場合によっては向きを反

転することによって得られる。

形式的要件

WR1:closed_shell_element の型は,oriented_closed_shell であってはならない。 
5.4.27  connected_edge_set  connected_edge_set は,edge 及び境界 vertex の定義域の和が弧状連結であるよ

うな edge の集合とする。

EXPRESS

による定義

*)

ENTITY connected_edge_set

   SUBTYPE  OF  (topological_representation_item);

   ces_edges : SET [1:?] OF edge;

END_ENTITY;

(*

属性定義

ces_edges

:共通の vertex で結合された弧状連結である edge の集合。

非形式的要件

IP1:connected_edge_set の次元数は,1 とする。

IP2:connected_edge_set の edge の定義域は,互いに交差してはならない。

5.5

topology_schema

の関数定義

5.5.1

conditional_reverse  この関数は,最初の引数に応じて入力された位相そのままか,又はその向き

を逆にした位相の複写を返す。

EXPRESS

による定義

*)

FUNCTION conditional_reverse (p

: BOOLEAN;

                            an_item

:  reversible_topology)

                             

:  reversible_topology;

   IF  p  THEN

     RETURN  (an_item);

   ELSE

     RETURN  (topology_reversed  (an_item));

   END_IF;

END_FUNCTION;

(*

引数定義

p

:(入力)向きの反転が必要かどうかを示すブール値。

an_item

:(入力)必要ならば反転可能な要素。

5.5.2

topology_reversed  この関数は,向きが反転されている以外,入力された位相と等価な位相を返す。

EXPRESS

による定義

*)


129

B 3700-42:1996 (ISO 10303-42:1994)

FUNCTION topology_reversed (an_item : reversible_topology)

                         

:  reversible_topology;

   IF ('TOPOLOGY_SCHEMA.EDGE' IN TYPEOF (an_item)) THEN

     RETURN  (edge_reversed  (an_item));

   END_IF;

   IF ('TOPOLOGY_SCHEMA.PATH' IN TYPEOF (an_item)) THEN

     RETURN  (path_reversed  (an_item));

   END_IF;

   IF ('TOPOLOGY_SCHEMA.FACE_BOUND' IN TYPEOF (an_item)) THEN

     RETURN  (face_bound_reversed  (an_item));

   END_IF;

   IF ('TOPOLOGY_SCHEMA.FACE' IN TYPEOF (an_item)) THEN

     RETURN  (face_reversed  (an_item));

   END_IF;

   IF ('TOPOLOGY_SCHEMA.SHELL' IN TYPEOF (an_item)) THEN

     RETURN  (shell_reversed  (an_item));

   END_IF;

   IF  ('SET'IN  TYPEOF  (an_item))THEN

     RETURN  (set_of_topology_reversed  (an_item));

   END_IF;

   IF ('LIST' IN TYPEOF (an_item)) THEN

     RETURN  (list_of_topology_reversed  (an_item));

   END_IF;

     RETURN  (?);

END_FUNCTION;

(*

引数定義

an_item

:(入力)向きが逆にされる反転可能な位相要素。

戻り値:(出力)an_item の向きを反転させた結果の topological_representation_item。

5.5.3

edge_reversed  この関数は,向きが反転されている以外,入力された edge と等価な edge を返す。

EXPRESS

による定義

*)

FUNCTION edge_reversed (an_edge:edge) : edge;

   LOCAL

     the_reverse  :  edge;

   END_LOCAL;

   IF ('TOPOLOGY_SCHEMA.ORIENTED_EDGE' IN TYPEOF (an_edge)) THEN

     the_reverse  :=  oriented_edge  (an_edge

oriented_edge.edge_element,

                                 (NOT  (an_edge

oriented_edge.orientation)));

   ELSE


130

B 3700-42:1996 (ISO 10303-42:1994)

     the_reverse  :=  oriented_edge  (an_edge,  FALSE);

   END_IF;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

an_edge

:(入力)向きが逆にされる edge。

the_reverse

:(出力)向きを反転した結果。

5.5.4

path_reversed  この関数は,向きが反転されている以外,入力された path と等価な path を返す。

EXPRESS

による定義

*)

FUNCTION path_reversed (a_path : path) : path;

   LOCAL

     the_reverse  :  path;

   END_LOCAL;

   IF ('TOPOLOGY_SCHEMA.ORIENTED_PATH' IN TYPEOF (a-path)) THEN

     the_reverse  :=  oriented_path(a_path

oriented_path.path_element,

                                  (NOT(a_path

oriented_path.orientation)));

   ELSE

     the_reverse  :=  oriented_path  (a_path,  FALSE);

   END_IF;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

a_path

:(入力)向きが逆にされる path。

the_reverse

:(出力)向きを反転した結果。

5.5.5

face_bound_reversed  この関数は,向きが反転されている以外,入力された face_bound と等価な

face_bound

を返す。

EXPRESS

による定義

*)

FUNCTION face_bound_reversed (a_face_bound : face_bound) : face_bound;

   LOCAL

     the_reverse  :  face_bound;

   END_LOCAL;

   IF ('TOPOLOGY_SCHEMA.FACE_OUTER_BOUND' IN TYPEOF (a_face_bound)) THEN

     the_reverse  :=  face_bound  (a_face_bound

face_bound.bound,

                                 (NOT  (a_face_bound

face_bound.orientation)));

   ELSE

     the_reverse  :=  face_bound  (a_face_bound.bound,


131

B 3700-42:1996 (ISO 10303-42:1994)

                                (NOT  (a_face_bound.orientation)));

   END_IF;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

a_face_bound

:(入力)向きが逆にされる face_bound。

the_reverse

:(出力)向きを反転した結果。

5.5.6

face_reversed  この関数は,向きが反転されている以外,入力された face と等価な face を返す。

EXPRESS

による定義

*)

FUNCTION face_reversed (a_face : face) : face;

   LOCAL

     the_reverse  :  face;

   END_LOCAL;

   IF ('TOPOLOGY_SCHEMA.ORIENTED_FACE' IN TYPEOF (a_face)) THEN

     the_reverse  :=  oriented_face  (a_face

oriented_face.face_element,

                                    (NOT  (a_face

oriented_face.orientation)));

   ELSE

     the_reverse  :=  oriented_face  (a_face,  FALSE);

   END_IF;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

a_face

:(入力)向きが逆にされる face。

the_reverse

:(出力)向きを反転した結果。

5.5.7

shell_reversed  この関数は,向きが反転されている以外,入力された shell と等価な shell を返す。

EXPRESS

による定義

*)

FUNCTION shell_reversed (a_shell : shell) : shell;

   LOCAL

     the_reverse  :  shell;

   END_LOCAL;

   IF ('TOPOLOGY_SCHEMA.ORIENTED_OPEN_SHELL' IN TYPEOF (a_shell)) THEN

     the_reverse  :=  oriented_open_shell(

                      a_shell

oriented_open_shell.open_shell_element,

                        (NOT  (a_shell

oriented_open_shell.orientation)));

   ELSE

     IF ('TOPOLOGY_SCHEMA.OPEN_SHELL' IN TYPEOF (a-shell)) THEN


132

B 3700-42:1996 (ISO 10303-42:1994)

       the_reverse  :=  oriented_open_shell(a_shell,  FALSE);

     ELSE

       IF  ('TOPOLOGY_SCHEMA.ORIENTED_CLOSED_SHELL'  IN  TYPEOF  (a_shell))  THEN

         the_reverse  :=  oriented_closed_shell(

                           a_shell

oriented_closed_shell.closed_shell_element,

                      NOT  (a_shell

oriented_closed_shell.orientation));

       ELSE

         IF  ('TOPOLOGY_SCHEMA.CLOSED_SHELL'  IN  TYPEOF  (a_shell))  THEN

           the_reverse  :=  oriented_closed_shell  (a_shell,  FALSE);

         ELSE

           the_reverse  :=  ?;

         END_IF;

       END_IF;

     END_IF;

   END_IF;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

a_shell

:(入力)向きが逆にされる shell。

the_reverse

:(出力)向きを反転した結果。

5.5.8

set_of_topology_reversed  この関数は,各要素の向きが反転されている以外,入力された位相の集

合と等価な位相の集合を返す。

EXPRESS

による定義

*)

FUNCTION set_of_topology_reversed (a_set : set_of_reversible_topology_item)

                                     :  set_of_reversible_topology_item;

   LOCAL

     the_reverse  :  set_of_reversible_topology_item;

   END_LOCAL;

   the_reverse  :=  [  ];

   REPEAT i := 1 TO SIZEOF (a_set);

     the_reverse := the_reverse + topology_reversed (a_set [i]);

   END_REPEAT;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

a_set

:(入力)向きが逆にされる位相要素の集合。

the_reverse

:(出力)向きを反転した結果。


133

B 3700-42:1996 (ISO 10303-42:1994)

5.5.9

list_of_topology_reversed  この関数は,リストの各要素の向きが反転されていて,更にそのリスト

内の要素の順番が逆であること以外は,入力された位相のリストと等価な位相のリストを返す。

EXPRESS

による定義

*)

FUNCTION list_of_topology_reversed (a_list

                               :  list_of_reversible_topology_item)

                               :  list_of_reversible_topology_item;

   LOCAL

     the_reverse  :  list_of_reversible_topology_item;

   END_LOCAL;

   the_reverse  :=  [  ];

   REPEAT i := 1 TO SIZEOF (a_list);

     the_reverse := topology_reversed (a_list [i]) + the_reverse;

   END_REPEAT;

   RETURN  (the_reverse);

END_FUNCTION;

(*

引数定義

a_list

:(入力)向き及びリストの順番が逆にされる位相要素のリスト。

the_reverse

:(出力)向き及び順番を反転した結果。

5.5.10  boolean_choose  この関数は,ブール型の入力引数の値に応じて二つの選択のうちの一つを返す。

この二つの選択も,入力引数とする。

EXPRESS

による定義

*)

FUNCTION boolean_choose (b : BOOLEAN;

           choice1,  choice2  :  GENERIC)  :  GENERIC;

   IF  b  THEN

     RETURN(choice1);

   ELSE

     RETURN(choice2);

   END_IF;

END_FUNCTION;

(*

引数定義

b

:(入力)要素が chpice1(TRUE)であるか choice2(FALSE)であるかを選択するために使用されるブ

ール値。

choice1

:(入力)選択対象の 1 番目の要素。

choice2

:(入力)選択対象の 2 番目の要素。

5.5.11  path_head_to_tail  この関数は,入力 path の edge について,それぞれの edge の終了 vertex が,そ

れに続く edge の開始 vertex と同じ場合,TRUE を返す。


134

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS

による定義

*)

FUNCTION path_head_to_tail(a_path : path) : LOGICAL;

   LOCAL

     n  :  INTEGER;

     p  :  LOGICAL  :=TRUE;

   END_LOCAL;

     n  :=  SIZEOF  (a_path.edge_list);

     REPEAT i := 2 TO n;

       p  :=  p  AND  (a_path.edge_list  [i-1].edge_end  :=:

                  a_path.edge_list  [i].edge_start);

     END_REPEAT;

     RETURN  (p);

END_FUNCTION;

(*

引数定義

a_path

:(入力)構成要素の edge について,その終点と次の edge の始点とが一致するように接続されてい

るかどうかが検査される path。

p

:(出力)path 内のすべての edge について,その終点と次の edge の始点とが一致するように接続されて

いれば TRUE となる論理型の変数。

5.5.12  list_face_loops  この関数は,与えられた face(又は subface)に対し,face 又は subface 内の loop

のリストを返す。

EXPRESS

による定義

*)

FUNCTION list_face_loops(f : face) : LIST [0:?] OF loop;

   LOCAL

     loops : LIST [0:?] OF loop := [];

   END_LOCAL;

   REPEAT i := 1 TO SIZEOF (f.bounds);

     loops := loops + (f.bounds [i].bound);

   END_REPEAT;

   RETURN(loops);

END_FUNCTION;

(*

引数定義

f

:(入力)境界 loop のリストを作ることが必要な face。

loops

:(出力)f の loop のリスト。

5.5.13  list_loop_edges  この関数は,与えられた loop に対し,その loop 内の edge のリストを返す。 
EXPRESS

による定義

*)


135

B 3700-42:1996 (ISO 10303-42:1994)

FUNCTION list_looP_edges(l: loop): LIST[0:?] OF edge;

   LOCAL

     edges : LIST [0:?] OF edge :=[];

   END_LOCAL;

   IF 'TOPOLOGY_SCHEMA.EDGE_LOOP' IN TYPEOF(l) THEN

     REPEAT i := 1 TO SIZEOF(l

path.edge_list);

       edges  :=  edges  +  (l

path.edge_list [i].edge_element);

     END_REPEAT;

   END_IF;

   RETURN(edges);

END_FUNCTION;

(*

引数定義

l

:(入力)edge のリストを作ることが必要な loop。

edges

:(出力)l の edge のリスト。

5.5.14  list_shell_edges  この関数は,与えられた shell に対し,その shell 内の edge のリストを返す。

EXPRESS

による定義

*)

FUNCTION list_shell_edges(s : shell) : LIST [0:?] OF edge;

   LOCAL

     edges : LIST [0:?] OF edge := [];

   END_LOCAL;

   REPEAT i := 1 TO SIZEOF(list_shell_loops(s));

     edges  :=  edges  +  list_loop_edges(list_shell_loops(s)[i]);

   END_REPEAT;

   RETURN(edges);

END_FUNCTION;

(*

引数定義

s

:(入力)edge のリストを作ることが必要な shell。

edges

:(出力)s の edge のリスト。

5.5.15  list_shell_faces  この関数は,与えられた shell に対し,その shell 内の face のリストを返す。 
EXPRESS

による定義

*)

FUNCTION list_shell_faces(s : shell) : LIST [0:?] OF face;

   LOCAL

     faces : LIST [0:?] OF face := [];

   END_LOCAL;

   IF ('TOPOLOGY_SCHEMA.CLOSED_SHELL' IN TYPEOF(s)) OR

     ('TOPOLOGY_SCHEMA.OPEN_SHELL'  IN  TYPEOF(s))  THEN


136

B 3700-42:1996 (ISO 10303-42:1994)

     REPEAT i := 1 TO SIZEOF(s

connected_face_set.cfs_faces);

       faces  :=  faces  +  s

connected_face_set.cfs_faces[i];

     END_REPEAT;

   END_IF;

   RETURN(faces);

END_FUNCTION;

(*

引数定義

s

:(入力)face のリストを作ることが必要な shell。

faces

:(出力)s の face のリスト。

5.5.16  list_shell_loops  この関数は,与えられた shell に対し,その shell 内の looP のリストを返す。 
EXPRESS

による定義

*)

FUNCTION list_shell_loops(s : shell) : LIST [0:?] OF loop;

   LOCAL

     loops : LIST [0:?] OF loop := [];

   END_LOCAL;

   IF 'TOPOLOGY_SCHEMA.VERTEX_SHELL' IN TYPEOF(s) THEN

     loops  :=  loops  +  s.vertex_shell_extent;

   END_IF;

   IF 'TOPOLOGY_SCHEMA.WIRE_SHELL' IN TYPEOF(s) THEN

     REPEAT i := 1 TO SIZEOF(s.wire_shell_extent);

       loops  :=  loops  +  s.wire_shell_extent[i];

     END_REPEAT;

   END_IF;

   IF ('TOPOLOGY_SCHEMA.OPEN_SHELL' IN TYPEOF(s)) OR

     ('TOPOLOGY_SCHEMA.CLOSED_SHELL'  IN  TYPEOF(s))  THEN

     REPEAT i := 1 TO SIZEOF(s.cfs_faces);

       loops  :=  loops  +  list_face_loops(s.cfs_faces[i]);

     END_REPEAT;

   END_IF;

   RETURN(loops);

END_FUNCTION;

(*

引数定義

s

:(入力)loop のリストを作ることが必要な shell。

loops

:(出力)s の loop のリスト。

5.5.17  mixed_loop_type_set  この関数は,loop の集合に対して,その集合が poly_loop と他の型の loop

(edge_loop 又は vertex_loop)との両者を含む場合,TRUE を返す。

EXPRESS

による定義


137

B 3700-42:1996 (ISO 10303-42:1994)

*)

FUNCTION mixed_loop_type_set(l: SET[0:?] OF loop):LOGICAL;

   LOCAL

     i   

:  INTEGER;

     poly_loop_type

:  LOGICAL;

   END_LOCAL;

   IF  (SIZEOF(1)  <=1)  THEN

     RETURN(FALSE);

   END_IF;

   poly_loop_type := ('TOPOLOGY_SCHEMA.POLY_LOOP' IN TYPEOF(l[1]));

   REPEAT i := 2 TO SIZEOF(l);

     IF(('TOPOLOGY_SCHEMA.POLY_LOOP'IN  TYPEOF(l[i]))  <>  poly_loop_type)  THEN

       RETURN(TRUE);

     END_IF;

   END_REPEAT;

   RETURN(FALSE);

END_FUNCTION;

(*

引数定義

l

:(入力)poly_loop と他の型の loop との混合であるかどうかを,決定することが必要な loop の集合。

5.5.18  list_to_set  この関数は,LIST から SET を生成する。その SET の要素の型は,元の LIST の型と同

じとする。

EXPRESS

による定義

*)

FUNCTION list_to_set(l : LIST [0:?] OF GENERIC: T) : SET OF GENERIC:T;

   LOCAL

     s : SET OF GENERIC:T := [ ];

   END_LOCAL;

   REPEAT i := 1 TO SIZEOF(l);

     s  :=  s  +  l[i];

   END_REPEAT;

   RETURN(s);

END_FUNCTION;

(*

引数定義

l

:(入力)SET に変換されるべき要素の LIST。

s

:(出力)l に対応する SET。

5.5.19  edge_curve_pcurves  この関数は,edge_curve に関連付けられている(すなわち,その幾何を表現

している)pcurve の集合を返す。

EXPRESS

による定義


138

B 3700-42:1996 (ISO 10303-42:1994)

*)

FUNCTION edge_curve_pcurves (an_edge : edge_curve;

                              the_surface_curves:SETOFsurface_curve)

         :  SET  OF  pcurve;

   LOCAL

     a_curve : curve;

     result  :  SET  OF  pcurve;

     the_geometry

:  LIST[1:2]  OF  pcurve_or_surface;

   END_LOCAL;

     a_curve  :=  an_edge.edge_geometry;

     result  :=  [];

     IF  'GEOMETRY_SCHEMA.PCURVE'  IN  TYPEOF(a_curve)  THEN

       result  :=  result  +  a_curve;

     ELSE

       IF  'GEOMETRY_SCHEMA.SURFACE_CURVE'  IN  TYPEOF(a_curve)  THEN

       the_geometry  :=  a_curve

surface_curve.associated_geometry;

       REPEAT  k  :=  1  TO  SIZEOF(the_geometry);

         IF  'GEOMETRY_SCHEMA.PCURVE'  IN  TYPEOF  (the_geometry[k])

         THEN

           result  :=  result  +  the_geometry[k];

         END_IF;

       END_REPEAT;

     ELSE

       REPEAT  j  :=  1  TO  SIZEOF(the_surface_curves);

         the_geometry  :=  the_surface_curves[j].associated_geometry;

         IF  the_surface_curves[j].curve_3d  :=:  a_curve

         THEN

           REPEAT  k  :=  1  TO  SIZEOF(the_geometry);

             IF  'GEOMETRY_SCHEMA.PCURVE'  IN  TYPEOF(the_geometry[k])

             THEN

               result  :=  result  +  the_geometry[k];

             END_IF;

           END_REPEAT;

         END_IF;

       END_REPEAT;

     END_IF;

   END_IF;

   RETURN(RESULT);

END_FUNCTION;

(*


139

B 3700-42:1996 (ISO 10303-42:1994)

引数定義

an_edge

:(入力)探索すべき pcurve を結合している edge_curve。

the_surface_curves

:(入力)pcurve の探索の対象となるすべての surface_curve の集合。

result

:(出力)an_edge に関連付けられているすべての pcurve の集合。

5.5.20  vertex_point_pcurves  この関数は,vertex_point に関連付けられている(すなわち,その幾何を表

現している)pcurve の集合を返す。

EXPRESS

による定義

*)

FUNCTION vertex_point_pcurves (a_vertex : vertex_point;

       the_degenerates  :  SET  OF  evaluated_degenerate_pcurve)

       :  SET  OF  degenerate_pcurve;

   LOCAL

     a_point : point;

     result  :  SET  OF  degenerate_pcurve;

   END_LOCAL;

     a_point  :=  a_vertex.vertex_geometry;

     result  :=  [];

     IF 'GEOMETRY_SCHEMA.DEGENERATE_PCURVE' IN TYPEOF (a_point) THEN

       result  :=  result  +  a_point;

     ELSE

       REPEAT  j  :=  1  TO  SIZEOF(the_degenerates);

         IF  (the_degenerates[j].equivalent_point  :=:  a_point)  THEN

           result  :=  result  +  the_degenerates[j];

         END_IF;

       END_REPEAT;

     END_IF;

     RETURN(RESULT);

END_FUNCTION;

(*

引数定義

a_vertex

:(入力)探索すべき pcurve を結合している vertex_point。

the_degenerates

:  (入力)pcurve の探索の対象となるすべての evaluated_degenerate_pcurve の集合。

result

:(出力)a_vertex と同じ幾何をもっているすべての degenerate_pcurve の集合。

EXPRESS

による定義

*)

END_SCHEMA; -- topology_schema

の終了

(*

6.

形状モデル

 (Geometric model)  次の EXPRESS 宣言は,geometric_model_schema を開始し,必要な外

部参照を明らかにする。


140

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS

による定義

*)

SCHEMA geometric_model_schema;

   REFERENCE  FROM  geometry_schema;

   REFERENCE  FROM  topology_schema;

   REFERENCE  FROM  measure_schema(length_measure,

                                   positive_length_measure,

                                   plane_angle_measure,

                                   plane_angle_unit,

                                   positive_plane_angle_measure);

(*

備考

1.  上で参照しているスキーマは,次の規格による。

geometry_schema

この規格の 4.

topology_schema

この規格の 5.

measure_schema   JIS B 3700-41

2.  このスキーマの図式表現を

附属書

D.16D.18 に示す。

6.1

概要

  geometric_model_schema は,オブジェクトの大きさ,位置及び形状を記述するデータの交換に

必要な基本的なリソースの集合を扱う。solid_model の下位型は,3 次元立体オブジェクトの正確な大きさ

及び形状を記述するデータの交換に必要な,基本的なリソースを与える。ここでは,CSG(Constructive Solid

Geometry

)及び境界表現(Boundary Representation, B-rep)という,2 種類の古典的な立体モデルを含む。

ここでは,CSG 又は境界表現のモデルに比べて,幾何的に及び位相的に情報の完全性が低いエンティティ

を含む。これらのエンティティは,立体モデリングシステムとは異なるシステム間でのデータ交換に適し

ている。

このスキーマでは,エンティティを上位型 solid_model 及びその種々の下位型を先頭に,論理的な順番で

規定する。これらの下位型は,種々の境界表現と CSG 立体とを含む。solid_model の下位型の後に,曲面

モデル,ワイヤフレームモデル及び幾何データ集合のエンティティが続く。

6.2

基本概念及び前提条件

  CSG モデルは,構成要素の基本立体及びモデルの構成に用いられるブール

操作[union(和),intersection(積)又は difference(差)

]の並びによって表現する。標準的な CSG 基本立

体は,cone,cylinder,sphere,torus,block 及び right_angular_wedge とし,その最終的な位置及び向きにお

いて定義されることが望ましい。ブール操作の論理的な並びを表すエンティティは,1 個の演算子及び 2

個の演算項をもつ boolean_result とする。ブール操作の結果を演算項とすることによって,入れ子の演算を

可能とする。CSG 基本立体のほかに,solid_model(掃引立体及び half_space_solid を含む。

)をブール演算

項としてもよい。掃引立体は,swept_face_solid 及び swept_area_solid とする。掃引立体を得るには,平面

(穴を含んでもよい。

)を立上げ又は回転する。half_space_solid は,基本的には,曲面の方の側にある半無

限の立体として定義する。これを box_domain で有限にしてもよい。

境界表現モデルは,その外部又は内部の境界を定義するシェルの集合で表現する。関連する幾何の定義

が適切であることと,モデル中の頂点,稜線,面,ループ及びシェルの個数に関するオイラー式を満足す

ることとを,制約によって保証する。faceted_brep は,すべての面が平面の場合及び各 loop か poly_loop の

場合の境界表現に限定する。

エンティティ solid_replica は,既に存在する立体の複製を新しい配置に生成する機構をもつ。


141

B 3700-42:1996 (ISO 10303-42:1994)

shell_based_surface_model

face_based_surface_model

shell_based_wireframe_model

edge_based_wireframe_model

,geometric_set 及び geometric_curve_set のエンティティは,manifold_solid_brep

としての整合性検査を行わなくてよい。これらは,不完全なモデル又は非多様体オブジェクト(2 次元モ

デルを含む。

)のデータ交換に用いることができる。

6.3

geometric_model_schema

の型定義

6.3.1

boolean_operand  この選択型 boolean_operand(ブール演算項)は,CSG 立体を作るブール操作が

適用可能なすべての型のエンティティを明らかにする。

EXPRESS

による定義

*)

TYPE boolean_operand = SELECT

   (solid_model,

    half_space_solid,

    csg_primitive,

    boolean_result);

END_TYPE;

(*

6.3.2

boolean_operator  この列挙型 boolean_operator(ブール演算子)は,CSG 立体の定義に用いられる

3

種類のブール演算子を定義する。

EXPRESS

による定義

*)

TYPE boolean_operator = ENUMERATION OF

   (union,

    intersection,

    difference);

END_TYPE;

(*

列挙項目の定義

union

:2 個の立体が定義する空間領域の,正規化された集合論的な和を構成する演算。

intersection

:2 個の立体が定義する空間領域の,正規化された集合論的な積を構成する演算。

difference

:2 個の立体が定義する空間領域の,正規化された集合論的な差を構成する演算。

6.3.3

csg_primitive  この選択型 csg_primitive(CSG 基本立体)は,ブール操作か適用可能な CSG 基本

立体の集合を定義する。CSG 基本立体は,sphere,right_circular_cone,right_circular_cylinder,torus,block

及び right_angular_wedge とする。

EXPRESS

による定義

*)

TYPE csg_primitive = SELECT

   (sphere,

    block,

    right_angular_wedge,

    torus,


142

B 3700-42:1996 (ISO 10303-42:1994)

    right_circular_cone,

    right_circular_cylinder);

END_TYPE;

(*

6.3.4

csg_select  この選択型は,CSG 立体の木の根として選択可能なエンティティの型(CSG 基本立体

が 1 個だけという特別な場合も含む。

)を明らかにする。

EXPRESS

による定義

*)

TYPE csg_select = SELECT

   (boolean_result,

    csg_primitive);

END_TYPE;

(*

6.3.5

geometric_set_select  この選択型は,geometric_set に存在可能なエンティティの型を明らかにする。

EXPRESS

による定義

*)

TYPE geometric_set_select = SELECT

   (point,

    curve,

    surface);

END_TYPE;

(*

6.3.6

surface_model  この選択型は,曲面モデルのすべてのエンティティの型を明らかにする。

製品モデルの表現の幾つかは,

曲面の集まりからなるが,

それが立体の完全な境界を作るとは限らない。

これらは,face 又は shell の集まりで表現できる。

EXPRESS

による定義

*)

TYPE surface_model = SELECT

   (shell_based_surface_model,

    face_based_surface_model);

END_TYPE;

(*

6.3.7

wireframe_model  この選択型は,ワイヤフレームモデルのすべてのエンティティの型を明らかに

する。

形状モデルのワイヤフレーム表現は,モデルの境界を作る曲面の交差についての情報だけを含むが,曲

面それ自身についての情報を含まない。

EXPRIESS

による定義

*)

TYPE wireframe_model = SELECT

   (shell_based_wireframe_model,


143

B 3700-42:1996 (ISO 10303-42:1994)

    edge_based_wireframe_model);

END_TYPE;

(*

6.4

geometric_model_schema

のエンティティ定義

  ここで扱うエンティティは,geometric_model_schema

の中で用いる。

6.4.1

solid_model  solid_model は,製品形状の完全な表現で,その内部にある点がすべて連結されてい

るものとする。あらゆる点は,立体の境界の内側,外側又は境界上のいずれかに分類できる。

立体モデルの表現には,幾つかの異なる形式かある。

EXPRESS

による定義

*)

ENTITY solid_model

   SUPERTYPE  OF  (ONEOF(  csg_solid

manifold_solid_brep, swept_face_solid,

                          swept_area_solid,  solid_replica))

   SUBTYPE  OF  (geometric_representation_item);

END_ENTITY;

(*

6.4.2

manifold_solid_brep  manifold_solid_brep は,一つ以上の曲面によって境界付けられた有限で弧状

連結な空間領域とする。これらの曲面は,それぞれ,連結,かつ向き付けされ,有限で閉じた 2-多様体と

する。貫通穴の個数及び空間領域における空洞(void)の個数に制限はない。

多様体立体の境界表現(B-rep)は,稜線及び頂点のグラフを利用する。このグラフは,連結,かつ向き

付けされ,有限で閉じた 2-多様体の曲面に埋め込まれる。埋め込まれたグラフは,曲面を弧状連結である

領域(面)に分割する。したがって,稜線及び頂点は面の境界を形作り,面の定義域は境界を含まない。

埋め込まれたグラフは,非連結であること及び疑似グラフであることが許される。グラフは,名前付けさ

れる。すなわち,グラフの中の各要素は,一意に同定される。面の幾何を定める曲面は,面の定義域内で

平面に埋込み可能な 2-多様体でなければならない。言い換えると,その曲面は,連結,かつ向き付けされ,

有限で自己干渉しておらず,曲面の種数が 0 でなければならない。

面は,境界以外では互いに交差しない。面の境界である各稜線は,たかだか 1 個の他の面に共有される。

境界表現の各稜線は,稜線の境界(すなわち,頂点)以外では交差しない。稜線の幾何を定める曲線は,

弧状連結でなければならず,稜線の定義域の中で自己干渉することも重なることも許されない。稜線の幾

何は,それを境界の一部とする

面の幾何に対して,整合しなければならない。

頂点の定義に用いる幾何は,それが境界の一部とする面及び稜線の幾何に対して,整合しなければなら

ない。

境界表現は,互いに分離している 1 個以上の closed_shell によって表現される。外殻の 1 個のシェルだけ

が,他のすべてのシェルを完全に包み,それ以外のシェルは,他のシェルを包まない。1 個以上の空洞を

もつ境界表現の定義には,下位型 brep_with_voids が用意される。次のオイラー式が満足されなければなら

ない。

Xms=

ν

ε

+2FL

l

−2(Sg

s

)=0 (10)

ここで,

ν

ε

FL

l

及び は,それぞれ,モデルにおける一意な頂点,稜線,面,面の境界及びシェルの

個数とし,

s

はシェルの種数の総和とする。


144

B 3700-42:1996 (ISO 10303-42:1994)

具体的には,位相のエンティティは,次の制約に従わなければならない。ここで,は,多様体立体の

境界表現とする。

−  各シェルは,一意でなければならない。

(

B)[S]=(B){S}

−  境界表現におけるそれぞれの面は,一意とする。

((

B)[S])[F]=((B)[S]){F}

−  それぞれのループは,一意とする。

(((

B)[S])[F])[L]=(((B)[S])[F]){L}

−  それぞれの(稜線+論理)の対は,一意とする。

((((

B)[S])[F])[L])[E

l

]=((((

B)[S])[F])[L]){E

l

}

−  境界表現におけるそれぞれの稜線は,ちょうど 2 個のループによって用いられるか,1 個のルー

プに 2 回用いられるかのいずれかとする。

|((((B)[S])[F])[L]){E

l

}|=2|((((

B)[S])[F])[L])[E

l

]|

すなわち,リスト((((B)[S])[F])[L])[E]において,それぞれの稜線は,ちょうど 2 回現れる。

−  式(10)を満足しなければならない。

2|(

B)[S]|

−2

Σ

G

s

=|(((((

B)[S])[F]){L

e

}){

E}){V}|+|((((B)[S])[F]){L

υ

}){

V}|

−|((((B)[S])[F]){L}){E}|+2|((B)[S])[F]|−|(((B)[S])[F])[L]|

境界表現の位相上の法線は,境界上の各点において,立体の内側から遠ざかる方向を指す曲面の法線の

方向とする。境界表現に用いられている closed_shell の法線は,境界表現の位相上の法線と整合しなければ

ならない。

manifold_solid_brep

は,

faceted_brep

及び brep_with_voids の 2 個の下位型をもち,

それらには,

暗黙の ANDOR

関係が存在する。次は,すべてインスタンス化される。

− manifold_solid_brep

− brep_with_voids

− faceted_brep

− faceted_brep

AND

brep_with_voids

EXPRESS

による定義

*)

ENTITY manifold_solid_brep

   SUBTYPE  OF  (solid_model);

   outer  :  closed_shell;

END_ENTITY;

(*

属性定義

outer

:立体の外部の境界を定義する closed_shell。shell の法線は,立体の内部から遠ざかる方向を指さなけ

ればならない。

非形式的要件

IP1:manifold_solid_brep の次元数は,3 とする。 
IP2:manifold_solid_brep の大きさは,有限であって,かつ 0 でない。

IP3:manifold_solid_brep の参照する vertex_point,向き付けされていない(すなわち,oriented_edge ではな


145

B 3700-42:1996 (ISO 10303-42:1994)

い)edge_curve,又は向き付けされていない(すなわち,oriented_face ではない)face_surface は,同じ

manifold_solid_brep

の参照する他のいかなる,vertex_point,向き付けされていない edge_curve,又は向き付

けされていない face_surface と交差しない。

IP4:同一の face が参照する異なる loop 同士は,共通の vertex をもたない。

備考

  これは,同じ面にある別の loop が,共通の edge をもたないことを意味する。幾何が存在する

場合,同じ face の異なる loop 同士は,交差しない。

IP5:manifold_solid_brep のすべての位相上の要素には,関連付けられた幾何が定義されている。

IP6:shell の法線は,境界表現の法線と一致し,かつ境界表現で表される立体から遠ざかる方向を指さな

ければならない。

IP7:それぞれの face は,manifold_solid_brep の shell から 1 回だけ参照されなければならない。

IP8:manifold_solid_brep におけるそれぞれの oriented_edge は,1 回だけ参照されなければならない。 
IP9:それぞれの向き付けされていない edge は,manifold_solid_brep の shell の face の中の loop から,ちょ

うど 2 回参照されなければならない。

IP10:境界表現に関するオイラー式は,満足されなければならない。このとき,種数の項 g

s

は,境界表現

の各 shell の種数の総和とする。

IP11:faceted_brep でない manifold_solid_brep は,poly_loop を参照してはならない。

IP12:faceted_brep は,face の境界として,poly_loop だけを参照できる。 
6.4.3

brep_with_voids  brep_with_voids は,その内部に 1 個以上の空洞を含む manifold_solid_brep の特別

な下位型とする。空洞は,oriented_closed_shell によって表現される。このとき,oriented_closed_shell の法

線は,空洞の内部を指す方向に定義される。すなわち,orientation は,FALSE となる。brep_with_voids は,

faceted_brep

となることもできる。

EXPRESS

による定義

*)

ENTITY brep_with_voids

   SUBTYPE  OF  (manifold_solid_brep);

   voids : SET [1:?] OF oriented_closed_shell;

END_ENTITY;

(*

属性定義

SELF

\manifold_solid_brep.outer:立体の外部の境界を定義する oriented_closed_shell。shell の法線は,立体

の内部から遠ざかる方向を指さなければならない。

voids

:立体の内部にある空洞を定義する oriented_closed_shell の集合。集合は,1 個以上の shell を含んで

もよい。

非形式的要件

IP1:各空洞の shell は,外殻の shell 及び他のすべての空洞の shell と分離していなければならない。 
IP2:各空洞の shell は,外殻の shell の内部になければならず,他の空洞の shell の内部にあってはならな

い。ただし,外殻の shell は,空洞の shell の集合には含まれない。

IP3:manifold_solid_brep の各 shell は,1 回だけ参照される。 
6.4.4

faceted_brep  faceted_brep は,すべての面か平面であって,すべての稜線か直線である境界表現モ

デルの単純な形式とする。


146

B 3700-42:1996 (ISO 10303-42:1994)

備考

  曲面として平面だけもつ境界表現立体が大部分のシステムで認められていることから,そ

れらを支援するために faceted_brep か導入された。多面体モデルは,manifold_solid_brep で

表現してもよいが,faceted_brep としての表現のほうがより簡潔である。

境界表現モデルと異なり,モデルの中で稜線及び頂点は,陽に表現されていないが,エンティティ

poly_loop

によって陰に参照可能とする。faceted_brep は,manifold_solid_brep と同じ位相上の制約を満たさ

なければならない。

EXPRESS

による定義

*)

ENTITY faceted_brep

   SUBTYPE  OF  (manifold_solid_brep);

END_ENTITY;

(*

非形式的要件

IP1:faceted_brep に含まれる shell の face の境界をなす loop は,すべて poly_loop 型とする。 
IP2:shell に含まれる face は,曲面の幾何を陰にもっても陽にもってもよい。陽にもつ場合,face_surface

は,平面とする。一つの face を定義している poly_loop は,すべて共面とする。

6.4.5

csg_solid  CSG モデルとして表現される立体は,いわゆる基本立体(primitive solid)の集まりで定

義される。これらは,正規化されたブール操作によって結合される,積,和及び差の演算が許される。特

別な場合として,CSG 立体を 1 個の CSG 基本立体で構成することもできる。

正規化された空間の部分集合とは,点集合に基づく位相幾何学の通常の意味で,その集合の内部の閉包

をいう。boolean_result にとって,正規化は,もともとの演算によって生成される懸垂稜線及び他の不正規

な要素を除去する効果をもつ。

CSG

立体を完全に定義するためには,幾何及び構造に関する 2 種類の情報を必要とする。

幾何に関する情報は,solid_model によって伝達される。これらは,典型的には,円柱,角柱,掃引のよ

うな基本立体であるが,一般の境界表現モデルを含むこともできる。solid_model は,solid_replica(変換さ

れた立体)及び half_space_solid を含むこともできる。

構造に関する情報は,boolean_result と csg_primitive とからなる木(非循環な有向グラフ)にある。これ

は,立体を構成するための“調理法”を表現している。末端の節点は,基本立体,その他の立体とする。

あらゆる csg_solid は,その立体を定義する木の根となる boolean_result をちょうど 1 個もつ(更に,木の

中に演算項として,boolean_result があってもよい。

。エンティティ csg_solid は,関係付けられた木で定義

される立体を,木の中のある特別なオブジェクトとして識別するために使われる。これによって,csg_solid

は,構成過程での中間的な結果を表現する他のエンティティ boolean_result と区別される。

EXPRESS

による定義

*)

ENTITY csg_solid

   SUBTYPE  OF  (solid_model);

   tree_root_expression  :  csg_select;

END_ENTITY;

(*

属性定義


147

B 3700-42:1996 (ISO 10303-42:1994)

tree_root_expression

:基本立体及び正規化された演算子からなる,立体を記述するブール表現。ブール表現

の木の根は,エンティティ boolean_result 又はエンティティ csg_primitive として,陽に与えられる。

6.4.6

boolean_result  boolean_result は,2 個の立体から 1 個の新しい立体を生成するための正規化され

た演算の結果とする。有効な演算は,正規化された,和,積及び差とする。ブール操作においては,立体

は,点の正規化集合であるとみなされる。

最終的な boolean_result は,演算及び 2 個の演算項に依存する。差の演算子の場合,演算項の順序も意味

をもつ。演算子は,union,intersection 又は difference のいずれでもよい。これらの演算子の効果は,次の

とおりとする。

2

個の立体についての union は,first_operand,second_operand のいずれか,又は両方の内部のすべての

点からなる新しい立体とする。

2

個の立体についての intersection は,

first_operand

と second_operand との両方に含まれるすべての点の集

合を正規化した新しい立体とする。

2

個の立体についての difference は,first_operand の中に含まれるが second_operand には含まれないすべ

ての点の集合を正規化した新しい立体とする。

備考

  例えば,1 番目の演算項が直方体で,2 番目の演算項が適当な大きさ及び配置の円柱とする

と,演算子 difference で生成された boolean_result は,円柱状の穴をもつ直方体となる。

EXPRESS

による定義

*)

ENTITY boolean_result

   SUBTYPE  OF  (geometric_representation_item);

   operator

:  boolean_operator;

   first_operand

:  boolean_operand;

   second_operand

:  boolean_operand;

ENDENTITY;

(*

属性定義

operator

:結果を作るための演算に用いられる boolean_operator。

first_operand

:ブール操作が適用される 1 番目の boolean_operand。

second_operand

:ブール操作が適用される 2 番目の boolean_operand。

6.4.7

sphere  sphere(球)は,中心及び半径によって定義される球の形をした CSG 基本立体とする。

EXPRESS

による定義

*)

ENTITY sphere

   SUBTYPE  OF  (geometric_representation_item);

   radius  :  positive_length_measure;

   centre  :  point;

END_ENTITY;

(*

属性定義

radius

:sphere の半径。


148

B 3700-42:1996 (ISO 10303-42:1994)

centre

:sphere の中心の配置。

6.4.8

right_circular_cone  right_circular_cone(直円錐)は,先端の切落としが許される円錐の形をした

CSG

基本立体とする。これは,軸,軸上の点,円錐の半頂角,半径及び距離によって定義される。円錐の

底面は,軸上の点から軸とは逆の方向に,この距離の位置に存在する。半径が 0 でなければ,円錐の切り

落とされた面の大きさ及び配置を与える。

EXPRESS

による定義

*)

ENTITY right_circular_cone

   SUBTYPE  OF  (geometric_representation_item);

   position  :  axis1_placement;

   height

:  positive_length_measure;

   radius

:  length_measure;

   semi_angle  :  plane_angle_measure;

WHERE

   WR1:  radius  >=  0.0;

END_ENTITY;

(*

属性定義

position

:軸上の点の配置及び軸の方向。

position.location

:円錐の軸上にある点で,円盤(平面で円状の面)の中心となるか,radius が 0 に等しけれ

ば,頂点となる。

position.axis

:円錐の中心軸(対称軸)の方向。

height

:radius が 0 より大きければ,円錐の二つの円盤の間の距離。radius が 0 に等しければ,底面から頂

点までの距離。

radius

:軸上の点(position.location)における円錐の半径。radius が 0 に等しければ,その点が頂点となる。

radius

が 0 より大きければ,円錐は,先端が切り落とされている。

semi_angle

:円錐の頂角の半分。これは,軸と円錐面の母線との間の角度とする。

形式的要件

WR1:radius は,負であってはならない。

非形式的要件

IP1:semi_angle は,0°を超え 90°未満でなければならない。

6.4.9

right_circular_cylinder  right_circular_cylinder(直円柱)は,有限な高さの円柱の形をした CSG 基

本立体とする。これは,軸上の点で一方の円盤(平面で円状の面)の中心,高さ及び半径によって定義さ

れる。円盤は,軸に垂直で,指定された半径をもつ。高さは,軸の正の方向で,最初の円盤の中心から,2

番目の円盤の中心までの距離とする。

EXPRESS

による定義

*)

ENTITY right_circular_cylinder

   SUBTYPE  OF  (geometric_representation_item);

   position  :  axis1_placement;


149

B 3700-42:1996 (ISO 10303-42:1994)

   height

:  positive_length_measure;

   radius

:  positive_length_measure;

END_ENTITY;

(*

属性定義

position

:軸上の point の配置及び軸の方向。

position.location

:円柱の軸の上にあって,円盤の上にある point。

position.axis

:円柱の中心の対称軸の方向。

height

:円柱の二つの円盤の間の距離。

radius

:円柱の半径。

6.4.10  torus  torus(輪環体,トーラス)は,大きい方の円(準線)の回りに,もう一方の円(母線)の領

域を掃引することによって定義される基本立体とする。準線は,配置及び方向(axis_placement)によって

定義される。

EXPRESS

による定義

*)

ENTITY torus

   SUBTYPE  OF  (geometric_representation_item);

   position  :  axis1_placement;

   major_radius

:  positive_1ength_measure;

   minor_radius

:  positive_length_measure;

WHERE

   WR1:  major_radius  >  minor_radius;

END_ENTITY;

(*

属性定義

position

:軸上の中心の point の配置及び軸の方向。これは,準線の中心及び平面を定義する。

major_radius

:準線の半径。

minor_radius

:母線の半径。

形式的要件

WR1:major_radius は,minor_radius より大きくなければならない。

6.4.11  block  block(直方体)は,配置座標系によって定義される直交平行六面体とする。block は,配置

座標系の軸に沿った正の長さ x,y 及び z によって指定され,配置座標系の原点に 1 個の頂点をもつ。

EXPRESS

による定義

*)

ENTITY block

   SUBTYPE  OF  (geometric_representation_item);

   position  : axis2_placement_3d;

   x  

:  positive_length_measure;

   y  

:  positive_length_measure;

   z  

:  positive_length_measure;


150

B 3700-42:1996 (ISO 10303-42:1994)

END_ENTITY;

(*

属性定義

position

:block を定義する座標系の配置及び向き。block は,position.location に 1 個の頂点をもち,その稜

線を配置座標系の軸の正の向きに並べる。

x

:配置の X 軸に沿った block の大きさ(position.p[1])。

y

:配置の Y 軸に沿った block の大きさ(position.p[2])。

z

:配置の Z 軸に沿った block の大きさ(position.p[3])。

6.4.12  right_angular_wedge  right_angular_wedge は,直方体とその面のうちの一つに対して垂直な平面と

の交差の結果とする。それは,配置座標系によって定義される。三角形又は不等辺四角形の面は,配置の

X

軸及び Y 軸によって定義される平面内に位置する。この面は,X 軸及び Y 軸に沿った正の長さ x の辺及

び y の辺,配置の原点から距離 y で X 軸に平行な長さ ltx の辺(ltx が 0 でない場合)

,並びに x の辺の終

点と ltx の辺の終点とを結ぶ辺によって,指定される。right_angular_wedge の残りの部分は,不等辺四角形

又は三角 形が 掃引さ れる 距離を定 義す る配置の Z 軸に 沿った 正の 長さ z によって 指定さ れる。

right_angular_wedge

は,ltx が 0 の場合 5 個の面をもち,それ以外の場合 6 個の面をもつ。

備考

  属性の解釈は,

12 による。

EXPRESS

による定義

*)

ENTITY right_angular_wedge

   SUBTYPE  OF  (geometric_representation_item);

12

right_angular_wedge

及び属性

   position  :  axis2_placement_3d;

   x  

:  positive_length_measure;

   y  

:  positive_length_measure;

   z      :  positive_length_measure;

   ltx  

:  length_measure;


151

B 3700-42:1996 (ISO 10303-42:1994)

WHERE

   WR1: ((0.0 <= ltx) AND (ltx < x));

END_ENTITY;

(*

属性定義

position

:right_angular_wedge のための配置の座標系の配置及び向き。right_angular_wedge は,position.location

に 1 個の頂点及び複数の稜線をもち,それらの稜線は,配置の軸の正の向きに配置される。

x

:配置の X 軸に沿った right_angular_wedge の大きさ。

y

:配置の Y 軸に沿った right_angular_wedge の大きさ。

z

:配置の Z 軸に沿った right_angular_wedge の大きさ。

ltx

:right_angular_wedge の X 方向(正の向き)の短い方の長さ。

形式的要件

WR1:ltx は,負であってはならず,かつ x より小さくなければならない。

6.4.13  swept_face_solid  swept_face_solid は,平面図形を掃引することによって手続き的に定義される。

swept_face_solid

の空間における位置は,swept_face の位置に依存する。swept_face は,角度が 360°の回転

による立体の場合を除いて,swept_face_solid の面になる。

EXPRESS

による定義

*)

ENTITY swept_face_solid

   SUPERTYPE  OF  (ONEOF(extruded_face_solid,  revolved_face_solid))

   SUBTYPE  OF  (solid_model);

   swept_face  :  face_surface;

WHERE

   WR1:  'GEO:METRY_SCHEMA.PLANE'  IN  TYPEOF(swept_face.face_geometry);

END_ENTITY;

(*

属性定義

swept_face

:掃引される領域を定義する face_surface。この面の大きさは,参照される face_surface の属性

bounds

によって定義される。

形式的要件

WR1:swept_face は,平面図形でなければならない。参照される face_surface の属性 face_geometry は,plane

とする。

6.4.14  extruded_face_solid  extruded_face_solid は,平面の face を掃引することによって定義される立体と

する。平行移動の方向はベクトル direction によって定義され,平行移動の長さは距離 depth によって定義

される。平面の face は穴をもつことができ,それは,掃引の結果,立体の穴となる。

EXPRESS

による定義

*)

ENTITY extruded_face_solid

   SUBTYPE  OF  (swept_face_solid);

   extruded_direction :  direction;


152

B 3700-42:1996 (ISO 10303-42:1994)

   depth        :  positive_length_measure;

WHERE

   WR1:  dot_product(

          (SELF

swept_face_solid.swept_face.face_geometry

          elementary_surface.position.p[3])

                                   ,  extruded_direction)  <>  0.0;

END_ENTITY;

(*

属性定義

SELF

\swept_face_solid.swept_face:掃引して立体を生成する face。

extruded_direction

:face が掃引される direction。

depth

:face が掃引される距離。

形式的要件

WR1

extruded_direction

は,掃引される face の平面の法線に垂直であってはならない。

6.4.15  revolved_face_solid  revolved_face_solid は,ある軸回りに平面の face を回転することによって生成

される立体とする。軸は,face と同一平面内になければならないが,face の内部と交差してはならない。

平面の face は穴をもつことができ,それは掃引の結果,立体の穴となる。回転の方向は,軸の正方向に沿

って見たとき,時計回りとする。より正確には,を軸の配置,を軸の方向,を face の境界上の任意

の点とし,によって生成される弧を C とすると,face を回転する際,C は,において d×(pA)の方向

にある。

備考

  属性の解釈は,

13 による。

EXPRESS

による定義

*)

ENTITY revolved_face_solid

   SUBTYPE  OF  (swept_face_solid);

   axis  :  axis1_placement;

   angle :  plane_angle_measure;

DERIVE

   axis_line  :  line  :=  line(axis.location,vector(axis.z,1.0));

END_ENTITY;


153

B 3700-42:1996 (ISO 10303-42:1994)

13

revolved_face_solid

(*

属性定義

SELF

\swept_face_solid.swept_face:回転して立体を生成する face。

axis

:その回りで回転が起こる軸。

angle

:回転の角度。この角度は,swept_face の平面から測られる。

axis_line

:回転の軸の直線。

非形式的要件

IP1:axis_line は,上位型 swept_face_solid の属性 swept_face の平面の上になければならない。

IP2:axis_line は,swept_face の内部と交差してはならない。

IP3:angle は,0∼360°の間とする。 
6.4.16  swept_area_solid  swept_area_solid は,境界付けられた平面の領域を掃引することによって手続き

的に定義されるエンティティとする。swept_area_solid の空間における位置は,swept_area の位置に依存す

る。swept_area は,角度が 360°の revolved_area_solid の場合を除いて,swept_area_solid の面になる。

EXPRESS

による定義

*)

ENTITY swept_area_solid

   SUPERTYPE  OF  (ONEOF(revolved_area_solid,  extruded_area_solid))

   SUBTYPE  OF  (solid_model);

   swept_area  :  curve_bounded_surface;

WHERE


154

B 3700-42:1996 (ISO 10303-42:1994)

   WR1:  'GEOMETRY_SCHEMA.PLANE'  IN  TYPEOF(swept_area.basis_surface);

END_ENTITY;

(*

属性定義

swept_area

: 掃 引 さ れ る 領 域 を 定 義 す る curve_bounded_surface 。 こ の 領 域 の 大 き さ は , 参 照 さ れ る

curve_bounded_surface

の属性 boundaries によって定義される。

形式的要件

WR1:swept_area は,平面でなければならない。参照される curve_bounded_surface の属性 basis_surface は,

plane

とする。

6.4.17  extruded_area_solid  extruded_area_solid は,境界付けられた平面の領域を掃引することによって定

義される立体とする。

平行移動の方向は,

ベクトル direction によって定義され,

平行移動の長さは距離 depth

によって定義される。平面の領域は穴をもつことかでき,それは,掃引の結果,立体の穴となる。

EXPRESS

による定義

*)

ENTITY extruded_area_solid

   SUBTYPE  OF  (swept_area_solid);

   extruded_direction :  direction;

   depth        

:  positive_length_measure;

WHERE

   WR1:  dot_product(

          (SELF

swept_area_solid.swept_area.basis_surface

          elementary_surface.position.p[3])

                                   extruded_direction)  <>  0.0;

END_ENTITY;

(*

属性定義

SELF

\swept_area_solid.swept_area:掃引して立体を生成する境界付けられた曲面の領域。

extruded_direction

:領域が掃引される direction。

depth

:領域が掃引される距離。

形式的要件

WR1

extruded_direction

は,swept_area の平面の法線に垂直であってはならない。

6.4.18  revolved_area_solid  revolved_area_solid は,境界付けられた平面の領域をある軸を中心に回転する

ことによって生成される立体とする。軸は,領域と同平面内になければならないが,その境界付けられた

平面の領域の内部と交差してはならない。境界付けられた平面の領域は,穴をもつことができ,掃引の結

果,立体の穴となる。回転の方向は,軸の正方向に沿って見たとき,時計回りとする。より正確には,A

を軸の配置,を軸の方向,を平面の領域の境界上の任意の点とし,によって生成される回転の弧を C

とすると,領域を回転する際,C は,において d×(pA)の方向にある。

EXPRESS

による定義

*)

ENTITY revolved_area_solid


155

B 3700-42:1996 (ISO 10303-42:1994)

   SUBTYPE  OF  (swept_area_solid);

   axis  :  axis1_placement;

   angle :  plane_angle_measure;

DERIVE

   axis_line  :  line  :=  line(axis.location,vector(axis.z,1.0));

END_ENTITY;

(*

属性定義

SELF

\swept_area_solid.swept_area:回転して立体を生成する curve_bounded_surface。

axis

:その回りで回転が起こる軸。

angle

:掃引の角度。この角度は,swept_area の平面から測られる。

axis_line

:回転の軸の直線。

非形式的要件

IP1:axis_line は,上位型 swept_area_solid の属性 swept_area の平面上になければならない。 
IP2:axis_line は,swept_area の内部と交差してはならない。

IP3:angle は,0∼360°の間とする。

6.4.19  half_space_solid  half_space_solid は,半空間によって定義される。半空間は,境界のない曲面の片

側にあり,定義空間の正規部分集合とする。定義空間は,下位型 boxed_half_space の直方体によって制限

される。曲面のどちら側が半空間に含まれるかは,曲面の法線及び agreement_flag によって決められる。

agreement_flag

が TRUE(真)ならば,部分集合は,法線がその内側から遠ざかる側にある。agreement_flag

が FALSE(偽)ならば,部分集合は,法線と同じ側にある。

有効な half_space_solid について,曲面は,ちょうど 2 個の部分集合に定義空間を分割しなければならな

い。更に,定義空間の中で,曲面は多様体とし,かつ曲面のすべての法線は同一の部分集合の側を指す。

備考

  half_space_solid は,solid_model の下位型ではない。half_space_solid は,ブール式の演算項

としてだけ有効とする。

EXPRESS

による定義

*)

ENTITY half_space_solid

   SUBTYPE  OF(geometric_representation_item);

   base_surface

:  surface;

   agreement_flag

:  BOOLEAN;

END_ENTITY;

(*

属性定義

base_surface

:半空間の境界を定義する surface。

agreement_flag

:base_surface の法線が half_space_solid の実体から遠ざかる方を指す場合,

agreement_flag

は,

TRUE

とする。

非形式的要件

IP1:base_surface は,定義空間をちょうど二つの部分集合に分けなければならない。half_space_solid が下

位型の boxed_half_space である場合,その定義域は,属性 enclosure の定義域とする。それ以外の場合,定


156

B 3700-42:1996 (ISO 10303-42:1994)

義域は全空間となり,base_surface は境界をもってはならない。

参考

“定義空間”は,原国際規格では“domain”とされている。half_space_solid 自身の定義域

との違いを明確にするために,定義空間とした。

6.4.20  boxed_half_space  boxed_half_space は,直方体によってトリムされる half_space_solid の下位型と

する。直方体は,幾何座標系の座標軸に平行な稜線をもつ。

備考

  この直方体は,有限な大きさの立体を生成して,CSG の計算を容易にすることを目的とす

る。

EXPRESS

による定義

*)

ENTITY boxed_half_space

   SUBTYPE  OF(half_space_solid);

   enclosure  :  box_domain;

END_ENTITY;

(*

属性定義

enclosure

:計算上の目的で,半空間を境界付ける直方体。

6.4.21  box_domain  box_domain は,幾何座標系の軸に平行に向き付けられた直方体とし,half_space_solid

の定義空間を制限する場合に使う。box_domain は,すべての座標値が最小となる頂点及び座標軸の方向に

測られる辺の長さで指定される。

EXPRESS

による定義

*)

ENTITY box_domain;

   corner

:  cartesian_point;

   xlength  :  positive_length_measure;

   ylength  :  positive_1ength_measure;

   zlength  :  positive_length_measure;

WHERE

   WR1:  SIZEOF(QUERY(item  <*  USEDIN(SELF,'')|

             NOT  ('GEOMETRIC_MODEL_SCHEMA.BOXED_HALF_SPACE'

                    IN  TYPEOF(item))))  =  0;

END_ENTITY;

(*

属性定義

corner

:直方体の頂点のうち,すべての座標値が最小となるもの。

xlength

:x 軸に平行な稜線に沿った box_domain の長さ。

ylength

:y 軸に平行な稜線に沿った box_domain の長さ。

zlength

:z 軸に平行な稜線に沿った box_domain の長さ。

形式的要件

WR1:box_domain は,boxed_half_space を定義する場合に限り用いる。

6.4.22  solid_replica  solid_replica は,新しい配置における立体の複製とする。


157

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS

による定義

*)

ENTITY solid_replica

   SUBTYPE  OF  (solid_model);

   parent_solid

:  solid_model;

   transformation

:  cartesian_transformation_operator_3d;

WHERE

   WR1:  acyclic_solid_replica(SELF,  parent_solid);

END_ENTITY;

(*

属性定義

parent_solid

:solid_replica を作るために複製される立体モデル。

transformation

:solid_replica の配置及び向きを定義する cartesian_transformation_operator_3d。拡大・縮小が

適用される場合,その係数も定義する。

形式的要件

WR1:solid_replica は,それ自身の定義に関係してはならない。

6.4.23  shell_based_surface_model  shell_based_surface_model は,次元数 2 の open_shell 又は closed_shell

の集合によって記述される。シェル同士は,頂点,稜線,及び面を共有する場合を除き,互いに交差して

はならない。シェルの共有部分は,同一の面,稜線及び頂点を参照しなければならない。

少なくとも 1 個の shell がなければならない。

shell

は,surface_model とは独立に存在してもよい。

EXPRESS

による定義

*)

ENTITY shell_based_surface_model

   SUBTYPE  OF  (geometric_representation_item);

   sbsm_boundary : SET [1:?] OF shell;

WHERE

   WR1:  constraints_geometry_shell_based_surface_model(SELF);

END_ENTITY;

(*

属性定義

sbsm_boundary

:surface_model を定義する shell の集合。

形式的要件

WR1:shell_based_surface_model を構成する shell の型は,open_shell 又は closed_shell に限られる。

非形式的要件

IP1:shell_based_surface_model の次元数は,2 とする。

IP2:shell は,共通の face,edge 又は vertex を除いて,重なったり交差したりしてはならない。

6.4.24  face_based_surface_model  face_based_surface_model は,次元数 2 の connected_face_set の集合によ

って記述される。

connected_face_set

同士は,頂点,稜線及び面を共有する場合を除き,互いに交差してはならない。


158

B 3700-42:1996 (ISO 10303-42:1994)

少なくとも 1 個の connected_face_set がなければならない。

connected_face_set

は,surface_model とは独立に存在してもよい。

EXPRESS

による定義

*)

ENTITY face_based_surface_model

   SUBTYPE  OF  (geometric_representation_item);

   fbsm_faces : SET [1:?] OF connected_face_set;

END_ENTITY;

(*

属性定義

fbsm_faces

:face_based_surface_model を構成する connected_face_set の集合。

非形式的要件

IP1:connected_face_set は,共通の face,edge 又は vertex を除いて,重なったり交差したりしてはならな

い。

IP2:fbsm_faces の次元数は,2 とする。

6.4.25  shell_based_wireframe_model  shell_based_wireframe_model は,R

3

に埋め込まれた稜線及び頂点の

グラフによって記述される。グラフは,連結でなくてもよい。グラフの中で,稜線は,その境界(すなわ

ち,頂点)を除き,交差しない。

頂点に関連付けられる幾何は,その頂点を境界にもつ稜線に対し,稜線に関連付けられる幾何と整合し

なければならない。

shell_based_wireframe_model

は,次元数か 0 又は 1 の 1 個以上の shell によって,表現される。

少なくとも 1 個の shell がなければならない。

shell

は,wireframe_model とは独立に存在してもよい。

EXPRESS

による定義

*)

ENTITY shell_based_wireframe_model

   SUBTYPE  OF  (geometric_representation_item);

   sbwm_boundary : SET [1:?] OF shell;

WHERE

   WR1:  constraints_geometry_shell_based_wireframe_model(SELF);

END_ENTITY;

(*

属性定義

sbwm_boundary

:wireframe_model を構成する vertex_shell 及び/又は wire_shell の集合。

形式的要件

WR1

そ れ ぞ れ の shell の 型 は , vertex_shell 又 は wire_shell で な け れ ば な ら な い 。 関 数

constraints_geometry_shell_based_wireframe_model

は,これらの幾何制約を評価し,制約が満たされる場合

に TRUE を返す。

非形式的要件

IP1:sbwm_boundary の次元数は,1 以下とする。


159

B 3700-42:1996 (ISO 10303-42:1994)

IP2:shell_based_wireframe_model は,正で有限な大きさをもつ。

IP3:shell は,共通の edge 又は vertex を除き,重なったり交差したりしてはならない。 
6.4.26  edge_based_wireframe_model  edge_based_wireframe_model は,R

3

に埋め込まれた稜線及び頂点の

グラフによって記述される。グラフは,連結でなくてもよい。グラフの中で,稜線はその境界(すなわち,

頂点)を除き,交差しない。

頂点に関連付けられる幾何は,その頂点を境界にもつ稜線に対し,稜線に関連付けられる幾何と整合し

なければならない。

edge_based_wireframe_model

は,次元数が 1 の 1 個以上の connected_edge_set によって表現される。

少なくとも 1 個の connected_edge_set がなければならない。

connected_edge_set

は,wireframe_model とは独立に存在してもよい。

EXPRESS

による定義

*)

ENTITY edge_based_wireframe_model

   SUBTYPE  OF  (geometric_representation_item);

   ebwm_boundary : SET [1:?] OF connected_edge_set,

END_FNTITY;

(*

属性定義

ebwm_boundary

:edge_based_wireframe_model を構成する connected_edge_set の集合。

非形式的要件

IP1:edge_based_wireframe_model の次元数は,1 とする。

IP2:connected_edge_set は,共通の edge 又は vertex を除き,重なったり交差したりしてはならない。

6.4.27  geometric_set  geometric_set は,位相構造が利用できないときに,モデルの交換のために用いる。 
EXPRESS

による定義

*)

ENTITY geometric_set

   SUPERTYPE  OF  (ONEOF(geometric_curve_set,

                    geometric_set_replica))

   SUBTYPE  OF  (geometric_representation_item);

   elements : SET [1:?] OF geometric_set_select;

END_ENTITY;

(*

属性定義

elements

:geometric_set を構成する幾何の要素であって,point,curve 又は surface とする。ただし,座標空

間の次元数は,同じでなければならない。

6.4.28  geometric_curve_set  geometric_curve_set は,2 次元又は 3 次元の point 及び curve の集まりとする。

EXPRESS

による定義

*)

ENTITY geometric_curve_set

   SUBTYPE  OF  (geometric_set);


160

B 3700-42:1996 (ISO 10303-42:1994)

WHERE

   WR1:  SIZEOF(QUERY(temp  <*  SELF

geometric_set.elements |

                              'GEOMETRY_SCHEMA.SURFACE'  IN  TYPEOF(temp)))  =  0;

END_ENTITY;

(*

属性定義

SELF

\geometric_set.elements:この geometric_set に含まれる要素。

形式的要件

WR1:この geometric_set には,曲面が含まれてはならない。

6.4.29  geometric_set_replica  geometric_set_replica は,異なる配置の geometric_set の複製を定義する。

geometric_set

の各要素は,同一の transformation(拡大・縮小を含んでもよい。

)によって変換される。生成

された geometric_set の型は,parent_set の型に一致する。

EXPRESS

による定義

*)

ENTITY geometric_set_replica

   SUBTYPE  OF  (geometric_set);

   parent_set  :  geometric_set;

   transformation

:  cartesian_transformation_operator;

DERIVE

   SELF

geometric_set.elements : SET [1:?] OF geometric.set_select :=

          build_transformed_set(transformation,  parent_set);

WHERE

   WR1:  acyclic_set_replica(SELF,  parent_set);

END_ENTITY;

(*

属性定義

parent_set

:geometric_set_replica を作るために複製される geometric_set。

transformation

:geometric_set_replica の配置及び向きを定義する cartesian_transformation_operator。

SELF

\geometric_set.elements:parent_set に transformation を適用した結果の要素の集合。

形式的要件

WR1:geometric_set_replica は,それ自身の定義に関係してはならない。

6.5

geometric_model_schema

の関数定義

6.5.1

acyclic_solid_replica  ブール関数 acyclic_solid_replica は,再帰的な関数であって,与えられた

solid_replica

がそれ自身の定義の中に現れるかどうかを判定する。この関数は,solid_replica が,その定義

中で直接的又は間接的に,自らを参照する場合,FALSE を返す。

EXPRESS

による定義

*)

FUNCTION acyclic_solid_replica(rep : solid_replica ; parent : solid_model)

                                       :  BOOLEAN;

   IF NOT (('GEOMETRY_SCHEMA.SOLID_REPLICA') IN TYPEOF(parent)) THEN


161

B 3700-42:1996 (ISO 10303-42:1994)

     RETURN(TRUE);

   END_IF;

  (*  parent

 solid_replica

型でなければ

 TRUE

を返す。

*)

   IF (parent :=: rep) THEN

     RETURN(FALSE);

  (*  parent

が同じ

 solid_replica

ならば

 FALSE

を返す。

それ以外の場合は,

parent

自身の

 parent_solid

で再び関数を呼ぶ。

*

   ELSE  RETURN(acyclic_solid_replica(rep

parent

solid_replica.parent_solid));

   END_IF;

END_FUNCTION;

(*

引数定義

rep

:(入力)循環的参照を検査する solid_replica。

parent

:(入力)複製の定義に用いられる solid_model。

:(出力)rep がそれ自身の定義で使われているとき,FALSE となるブール変数。

6.5.2

acyclic_set_replica   ブ ー ル 関 数 acyclic_set_replica は , 再 帰 的 な 関 数 で あ っ て , 与 え ら れ た

geometric_set_replica

がそれ自身の定義の中に現れるかどうかを判定する。この関数は,geometric_set_replica

が,その定義中で直接的又は間接的に,自らを参照する場合,FALSE を返す。

EXPRESS

による定義

*)

FUNCTION acyclic_set_replica(rep : geometric_set_replica;

                        parent  :  geometric_set)  :  BOOLEAN;

   IF NOT(('GEOMETRY_SCHEMAGEOMETRIC_SET_REPLICA') IN TYPEOF(parent)) THEN

     RETURN(TRUE);

   END_IF;

  (*  parent

 geometric_set_replica

型でなければ,

TRUE

を返す。

*)

   IF (parent :=: rep) THEN

     RETURN  (FALSE);

  (*  parent

が同じ

 geometric_set_replica

ならば

 FALSE

を返す。

それ以外の場合は,

parent

自身の

 parent_set

で同じ関数を呼ぶ。

*)

   ELSE  RETURN(acyclic_set_replica(rep,

                         parent

geometric_set_replica.parent_set));

   END_IF;

END_FUNCTION;

(*

引数定義

rep

:(入力)循環的参照を検査する geometric_set_replica。

parent

:(入力)複製の定義に用いられる geometric_set。

:(出力)rep がそれ自身の定義で使われているとき,FALSE となるブール変数。


162

B 3700-42:1996 (ISO 10303-42:1994)

6.5.3

constraints_geometry_shell_based_surface_model  この関数は,shell_based_surface_model に関する

幾何制約を評価し,制約か満たされる場合に,TRUE を返す。

EXPRESS

による定義

*)

FUNCTION constraints_geometry_shell_based_surface_model

             (m:  shell_based_surface_model):  BOOLEAN;

   LOCAL

     result:  BOOLEAN  :=  TRUE;

   END_LOCAL;

   REPEAT j := 1 TO SIZEOF(m.sbsm_boundary);

     IF  (NOT('TOPOLOGY_SCHEMA.OPEN_SHELL'  IN  TYPEOF(m.sbsm_boundary[j]))  AND

       (NOT('TOPOLOGY_SCHEMA.CLOSED_SHELL'IN  TYPEOF(m.sbsm_boundary[j]))))

     THEN

       result  :=  FALSE;

       RETURN(result);

       (*  surface_model

は,

open_shell

 closed_shell

とからなる。

*)

     END_IF;

   END_REPEAT;

   RETURN(result);

END_FUNCTION;

(*

引数定義

m

:(入力)幾何制約を検証する shell_based_surface_model。

result

:(出力)m の境界か open_shell 及び closed_shell だけからなるとき,TRUE となるブール変数。

6.5.4

constraints_geometry_shell_based_wireframe_model  この関数は,shell_based_wireframe_model に

関する幾何制約を評価し,制約が満たされる場合に TRUE を返す。

EXPRESS

による定義

*)

FUNCTION constraints_geometry_shell_based_wireframe_model

                      (m  :  shell_based_wireframe_model)  :  BOOLEAN;

   LOCAL

     result:  BOOLEAN  :=  TRUE;

   END_LOCAL;

   REPEAT j := 1 TO SIZEOF(m.sbwm_boundary);

     IF  (NOT('TOPOLOGY_SCHEMA.WIRE_SHELL'  IN  TYPEOF(m.sbwm_boundary[j]))  AND

       (NOT('TOPOLOGY_SCHEMA.VERTEX_SHELL'  IN  TYPEOF(m.sbwm_boundary[j]))))

     THEN

       result  :=  FALSE;

       RETURN(result);

       (*  wireframe_model

は,

wire_shell

 vertex_shell

とからなる。

*)


163

B 3700-42:1996 (ISO 10303-42:1994)

     END_IF;

   END_REPEAT;

   RETURN(result);

END_FUNCTION;

(*

引数定義

m

:(入力)幾何制約を検証する shell_based_wireframe_model。

result

:(出力)m の境界が wire_shell 及び vertex_shell だけからなるとき,TRUE となるブール変数。

6.5.5

build_transformed_set  この関数は,入力された geometric_set の個々の要素(曲線,点又は曲面)

に対し,cartesian_transformation_operator で表される変換を適用して,新たな集合を生成する。

EXPRIESS

による定義

*)

FUNCTION build_transformed_set(tr : cartesian_transformation_operator;

           gset  :  geometric_set)  :  SET  [0:?]  OF  geometric_set_select;

   LOCAL

     s   

:  SET  [1:?]  OF  geometric_set_select  :=  gset.elements;

     trset

: SET [0:?] OF geometric_set_select := [];

     trcurve

:  curve;

     trpoint

:  point;

     trsurf

:  surface;

   END_LOCAL;

   REPEAT j := 1 TO SIZEOF(s);

     IF  ('GEOMETRY_SCHEMA.CURVE'  IN  TYPEOF(s[j]))  THEN

       trset  :=  trset  +  curve_replica(s[j],tr);  ELSE

       IF  ('GEOMETRY_SCHEMA.POINT'  IN  TYPEOF(s[j]))  THEN

         trset  :=  trset  +  point_replica(s[j],tr);  ELSE

         IF  ('GEOMETRY_SCHEMA.SURFACE'  IN  TYPEOF(s[j]))  THEN

           trset  :=  trset  +  surface_replica(s[j],

             tr  ||  cartesian_transformation_operator_3d  (?));

         END_IF;

       END_IF;

     END_IF;

   END_REPEAT;

   RETURN(trset);

END_FUNCTION;

(*

引数定義

tr

:(入力)変換を定義する cartesian_transformation_operator。

gse

:(入力)変換される geometric_set。

trset

:(出力)変換された結果の集合。


164

B 3700-42:1996 (ISO 10303-42:1994)

EXPRESS

による定義

*)

END_SCHEMA; -- geometric_model_schema

の終了

(*


165

B 3700-42:1996 (ISO 10303-42:1994)

附属書 A(規定)  エンティティの短縮名

A.1 は,この規格で規定するエンティティの短縮名を示す。短縮名の使用に関する要件は,この規格

に関連する規格群で規定される実装方法の中で示す。

附属書

A

A.1

  エンティティの短縮名

エンティティ名

短縮名

AXIS1_PLACEMENT AX1PLC

AXIS2_PLACEMENT_2D A2PL2D

AXIS2_PLACEMENT_3D A2PL3D

BEZIER_CURVE BZRCRV

BEZIER_SURFACE BZRSRF

BLOCK

BLOCK

BOOLEAN_RESULT BLNRSL

BOUNDARY_CURVE BNDCR

BOUNDED_CURVE BNDCRV

BOUNDED_PCURVE BNDPCR

BOUNDED_SURFACE BNDSRF

BOUNDED_SURFACE_CURVE BNSRCR

BOXED_HALF_SPACE BXHLSP

BOX_DOMAIN BXDMN

BREP_WITH_VOIDS BRWTVD

B_SPLINE_CURVE BSPCR

B_SPLINE_CURVE_WITH_KNOTS BSCWK

B_SPLINE_SURFACE BSPSR

B_SPLINE_SURFACE_WITH_KNOTS BSSWK

CARTESIAN_POINT CRTPNT

CARTESIAN_TRANSFORMATION_OPERATOR CRTROP

CARTESIAN_TRANSFORMATION_OPERATOR_2D CTO2

CARTESIAN_TRANSFORMATION_OPERATOR_3D CTO3

CIRCLE

CIRCLE

CLOSED_SHELL CLSSHL

COMPOSITE_CURVE CMPCRV

COMPOSITE_CURVE_ON_SURFACE CCOS

COMPOSITE_CURVE_SEGMENT CMCRSG

CONIC

CONIC

CONICAL_SURFACE CNCSRF

CONNECTED_EDGE_SET CNEDST

CONNECTED_FACE_SET CNFCST

CSG_SOLID CSGSLD

CURVE

CURVE

CURVE_BOUNDED_SURFACE CRBNSR

CURVE_REPLICA CRVRPL

CYLINDRICAL_SURFACE CYLSRF

DEGENERATE_PCURVE DGNPCR

DEGENERATE_TOROIDAL_SURFACE DGTRSR

DIRECT1ON DRCTN

EDGE

EDGE


166

B 3700-42:1996 (ISO 10303-42:1994)

エンティティ名

短縮名

EDGE_BASED_WIREFRAME_MODEL EBWM

EDGE_CURVE EDGCRV

EDGE_LOOP EDGLP

ELEMENTARY_SURFACE ELMSRF

ELLIPSE

ELLPS

EVALUATED_DEGENERATE_PCURVE EVDGPC

EXTRUDED_AREA_SOLID EXARSL

EXTRUDED_FACE_SOLID EXFCSL

FACE

FACE

FACETED_BREP FCTBR

FACE_BASED_SURFACE_MODEL FBSM

FACE_BOUND FCBND

FACE_OUTER_BOUND FCOTBN

FACE_SURFACE FCSRF

GEOMETRIC_CURVE_SET GMCRST

GEOMETRIC_REPRESENTATION_CONTEXT GMRPCN

GEOMETRIC_REPRESENTATION_ITEM GMRPIT

GEOMETRIC_SET GMTST

GEOMETRIC_SET_REPLICA GMSTRP

HALF_SPACE_SOLID HLSPSL

HYPERBOLA HYPRBL

INTERSECTION_CURVE INTCRV

LINE

LINE

LOOP

LOOP

MANIFOLD_SOLID_BREP MNSLBR

OFFSET_CURVE_2D OFCR2D

OFFSET_CURVE_3D OFCR3D

OFFSET_SURFACE OFFSRF

OPEN_PATH OPNPTH

OPEN_SHELL OPNSHL

ORIENTED_CLOSED_SHELL ORCLSH

ORIENTED_EDGE ORNEDG

ORIENTED_FACE ORNFC

ORIENTED_OPEN_SHELL OROPSH

ORIENTED_PATH ORNPTH

OUTER_BOUNDARY_CURVE OTBNCR

PARABOLA PRBL

PATH

PATH

PCURVE

PCURVE

PLACEMENT PLCMNT

PLANE

PLANE

POINT

POINT

POINT_ON_CURVE PNONCR

POINT_ON_SURFACE PNONSR

POINT_REPLICA PNTRPL

POLYLINE

PLYLN

POLY_LOOP PLYLP

QUASI_UNIFORM_CURVE QSUNCR

QUASI_UNIFORM_SURFACE QSUNSR


167

B 3700-42:1996 (ISO 10303-42:1994)

エンティティ名

短縮名

RATIONAL_B_SPLINE_CURVE RBSC

RATIONAL_B_SPLINE_SURFACE RBSS

RECTANGULAR_COMPOSITE_SURFACE RCCMSR

RECTANGULAR_TRIMMED_SURFACE RCTRSR

REPARAMETRISED_COMPOSITE_CURVE_SEGMENT RCCS

REVOLVED_AREA_SOLID RVARSL

REVOLVED_FACE_SOLID RVFCSL

RIGHT_ANGULAR_WEDGE RGANWD

RIGHT_CIRCULAR_CONE RGCRCN

RIGHT_CIRCULAR_CYLINDER RGCRCY

SEAM_CURVE SMCRV

SHELL_BASED_SURFACE_MODEL SBSM

SHELL_BASED_WIREFRAME_MODEL SBWM

SOLID_MODEL SLDMDL

SOLID_REPLICA SLDRPL

SPHERE

SPHERE

SPHERICAL_SURFACE SPHSRF

SUBFACE

SBFC

SURFACE

SRFC

SURFACE_CURVE SRFCRV

SURFACE_OF_LINEAR_EXTRUSION SL

SURFACE_OF_REVOLUTION SROFRV

SURFACE_PATCH SRFPTC

SURFACE_REPLICA SRFRPL

SWEPT_AREA_SOLID SWARSL

SWEPT_FACE_SOLID SWFCSL

SWEPT_SURFACE SWPSRF

TOPOLOGICAL_REPRESENTATION_ITEM TPRPIT

TOROIDAL_SURFACE TRDSRF

TORUS

TORUS

TRIMMED_CURVE TRMCRV

UNIFORM_CURVE UNFCRV

UNIFORM_SURFACE UNFSRF

VECTOR

VECTOR

VERTEX

VERTEX

VERTEX_LOOP VRTLP

VERTEX_POINT VRTPNT

VERTEX_SHELL VRTSHL

WIRE_SHELL WRSHL


168

B 3700-42:1996 (ISO 10303-42:1994)

附属書 B(規定)  情報オブジェクトの登録

開放型システムで情報オブジェクトをあいまいさなく識別するために,次のオブジェクト識別子をこの

規格自身に割り当てる。この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

{iso standard 10303 part(42)version(1)}

開放型システムで geometry_schema(4.参照)をあいまいさなく識別するために,geometry_schema に対

して,次のオブジェクト識別子が割り当てられている。

{iso standard 10303 part(42)version(1)object(1)geometry-schema(1)}

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

開放型システムで topology_schema(5.参照)をあいまいさなく識別するために,topology_schema に対し

て,次のオブジェクト識別子が割り当てられている。

{iso standard 10303 part(42)version(1)object(1)topology-schema(2)}

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

開 放 型 シ ス テ ム で geometric_model_schema ( 6. 参 照 ) を あ い ま い さ な く 識 別 す る た め に ,

geometric_model_schema

に対して,次のオブジェクト識別子が割り当てられている。

{iso standard 10303 part(42)version(1)object(1)geometric-model-schema(3)}

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。


169

B 3700-42:1996 (ISO 10303-42:1994)

附属書 C(参考)  計算機可読な一覧

この附属書は,エンティティの名称に対応する短縮名の一覧,及びこの規格における EXPRESS による

定義の一覧を提供する。文又は注釈は,含まない。この附属書は,計算機可読な形式だけで提供される。


170

B 3700-42:1996 (ISO 10303-42:1994)

附属書 D(参考)  EXPRESS-G による図式表現

この附属書の

D.1D.18 は,

附属書

C

(参考)

に示す EXPRESS に対応する。これらの図は,EXPRESS

言語のための図式表現 EXPRESS-G を用いている。EXPRESS-G は,JIS B 3700-11 

附属書

D

(規定)

規定されている。


171

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.1

geometry_schema

EXPRESS-G

による図式表現(

1/12

geometric_representation_item

の下位型


172

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.2

geometry_schema

EXPRESS-G

による図式表現(

2/12

placement

及び

cartesian_transformation_operator

の下位型


173

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.3

geometry_schema

EXPRESS-G

による図式表現(

3/12

point

の下位型


174

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.4

geometry_schema

EXPRESS-G

による図式表現(

4/12

curve

の下位型


175

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.5

geometry_schema

EXPRESS-G

による図式表現(

5/12

surface

の下位型


176

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.6

geometry_schema

EXPRESS-G

による図式表現(

6/12

conic

の下位型

附属書

D

D.7

geometry_schema

EXPRESS-G

による図式表現(

7/12

surface_curve

の下位型


177

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.8

geometry_schema

EXPRIESS-G

による図式表現(

8/12

bounded_curve

の下位型


178

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.9

geometry_schema

EXPRESS-G

による図式表現(

9/12

b_spline_curve

の下位型


179

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.10

geometry_schema

EXPRESS-G

による図式表現(

10/12

elementary_surface

の下位型


180

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.11

geometry_schema

EXPRESS-G

による図式表現(

11/12

bounded_surface

の下位型


181

B 3700-42:1996 (ISO 10303-42:1994)

附属書

D

D.12

geometry_schema

EXPRIESS-G