2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

まえがき

この規格は,工業標準化法に基づいて,日本工業標準調査解の審議を経て,経済産業大臣が改正した,

日本工業規格である,これによってJIS B 3700-42は改正され,この規格に置き換えられる。

この追補は,1994に発行されたISO 10303-42:1994,Industrial automation systems and integration-Product data

representation and exchange-Part 42:Integrated generic resources:Geometric and topological representationに対し

て,2001年に発行された Technical Corrigendum 3を翻訳し,技術的内容及び規格票の様式を変更すること

なくJIS B 3700-42:1996追補2として発行されたものである。

この規格の一部が,技術的性格をもつ,特許権,出願公開後の特許出願,実用新案権,または出願公開

後の実用新案登録出願に抵触する可能性があることに注意を喚起する。経済産業大臣及び日本工業標準調

査会は,このような技術的性質を持つ特許権,出願公開後の特許出願,実用新案権,又は出願公開後の実

用新案登録にかかわる確認について,責任を持たない。

(1)

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

日本工業規格

JIS

B 3700-42:2005

(ISO 10303-42:1994/Cor.3:2001)

産業オートメーションシステム及びその統合―

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

第42部:統合総称リソース:幾何及び位相の表現

(追補2)

Industrial automation systems and integration-Product data representation

and exchange-Part 42:Integrated generic resource:Geometric and

topological representation

(Technical Corrigendum 3)

JIS B 3700-42:1996を,次のように改正する。

9ページ

4.

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティfounded̲itemを,composite̲curve̲segment及びsurface̲patchの上位型として参照する。次

の行を,representation̲schema の REFERENCE FROMのリストに追加する。

founded̲item,

12ページ

4.3

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティの定義又は関数の中で生成されるエンティティを初期化するには,定数を必要とする。

geometric̲representation̲item 型を生成するとき,定数dummy̲gri を定義の一部として用いる。次の新しい

箇条を4.3.1として挿入し,箇条4.3.1〜4.3.13の番号を順に付け直す。

4.3.1 定数の定義 geometric̲representation̲item型を生成するとき,定数dummy̲griを定義の一部とし

て用いる。これは,適切な上位型と空文字列をもつ属性 name とを与える。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

2

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

EXPRESSによる定義

*)

CONSTANT

dummy̲gri : geometric̲representation̲item := representation̲item('')||

geometric̲representation̲item();

END̲CONSTANT;

(*

18ページ

4.4.4

エンティティ cartesian̲point のEXPRESSによる定義を,新たに導入した下位型を含めるように変更す

る。EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY cartesian̲point

SUPERTYPE OF (ONEOF(cylindrical̲point, polar̲point, spherical̲point))

SUBTYPE OF (point);

coordinates : LIST [1:3] OF length̲measure;

END̲ENTITY;

(*

19ページ

4.4.5

この規格群の他の部からの参照を可能にするために,cartesian̲point の下位型を定義する。次の新しい

箇条を4.4.5,4.4.6,4.4.7として挿入し,箇条4.4.5〜4.4.73の番号を4.4.8〜4.4.76として順に付け直す。次の

新しい図を 図1 として挿入し,図1〜13 の番号を 図2〜14 として順に付け直す。

4.4.5 cylindrical̲point cylindrical̲point は,cartesian̲point の下位型の点であり,対応するデカルト座

標系の原点に中心をもつ円柱座標系によって,その位置を定義する。

EXPRESSによる定義

*)

ENTITY cylindrical̲point

SUBTYPE OF (cartesian̲point);

r

: length̲measure;

theta : plane̲angle̲measure;

z

: length̲measure;

DERIVE

SELF¥cartesian̲point.coordinates : LIST [1:3] OF length̲measure :=

[r*cos(theta), r*sin(theta), z];

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

3

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

WHERE

WR1: r >= 0.0;

END̲ENTITY;

(*

属性定義

r: この点からZ軸への距離。

theta: この点とZ軸とを含む平面及びXZ平面がなす角度。

z: この点からXY平面への距離。

形式的要件

WR1: r の値は,負になってはならない。

非形式的要件

IP1: theta の値は,0°以上 360°未満とする。

4.4.6 spherical̲point spherical̲point は,cartesian̲point の下位型の点であり,対応するデカルト座標

系の原点に中心をもつ球面極座標系によって,その位置を定義する。

EXPRESSによる定義

*)

ENTITY spherical̲point

SUBTYPE OF (cartesian̲point);

r

: length̲measure;

theta : plane̲angle̲measure;

phi

: plane̲angle̲measure;

DERIVE

SELF¥cartesian̲point.coordinates : LIST [1:3] OF length̲measure :=

[r*sin(theta)*cos(phi), r*sin(theta)*sin(phi), r*cos(theta)];

WHERE

WR1: r >= 0.0;

END̲ENTITY;

(*

属性定義

r: この点から原点への距離。

theta: この点と原点とを結ぶ直線及びZ軸がなす角度θ。

phi: この点と原点とを結ぶ直線をXY平面に投影した直線及びX軸がなす角度φ。

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

形式的要件

WR1: r の値は,負になってはならない。

非形式的要件

IP1: theta の値は,0°以上 180°以下とする。

IP2: phi の値は,0°以上 360°未満とする。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

4

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

4.4.7 polar̲point polar̲point は,cartesian̲point の下位型の点であり,対応するデカルト座標系の原

点に中心をもつ2次元極座標系によって,その位置を定義する。

EXPRESSによる定義

*)

ENTITY polar̲point

SUBTYPE OF (cartesian̲point);

r

: length̲measure;

theta : plane̲angle̲measure;

DERIVE

SELF¥cartesian̲point.coordinates : LIST [1:3] OF length̲measure :=

[r*cos(theta), r*sin(theta)];

WHERE

WR1: r >= 0.0;

END̲ENTITY;

(*

属性定義

r: この点から原点への距離。

theta: この点と原点とを結ぶ直線及びX軸がなす角度。

形式的要件

WR1: r の値は,負になってはならない。

非形式的要件

IP1: theta の値は,0°以上 360°未満とする。

page

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

5

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

図 1 spherical̲point の属性

23ページ

4.4.13

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティ axis1̲placement のEXPRESSによる定義は,属性 z を適切に初期化していない。EXPRESS

による定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY axis1̲placement

SUBTYPE OF (placement);

axis

: OPTIONAL direction;

DERIVE

z : direction := NVL(normalise(axis), dummy̲gri ||

direction([0.0,0.0,1.0]));

WHERE

WR1: SELF¥geometric̲representation̲item.dim = 3;

END̲ENTITY;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

6

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

(*

28ページ

4.4.17

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティ cartesian̲transformation̲operator̲3d のEXPRESSによる定義は,属性 dim の参照の方法

に誤りがある。EXPRESSによる定義の WR1 を,次と置き換える。

WR1: SELF¥geometric̲representation̲item.dim = 3;

29ページ

4.4.18

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティ cartesian̲transformation̲operator̲2d のEXPRESSによる定義は,属性 dim の参照の方法

に誤りがある。EXPRESSによる定義の WR1 を,次と置き換える。

WR1: SELF¥geometric̲representation̲item.dim = 2;

44ページ

4.4.34

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティ trimmed̲curve のEXPRESSによる定義は,WHERE条件節に論理的な誤りがある。

EXPRESSによる定義の WR1 及び WR2 を,次と置き換える。

WR1: (HIINDEX(trim̲1) = 1) OR (TYPEOF(trim̲1[1]) <> TYPEOF(trim̲1[2]));

WR2: (HIINDEX(trim̲2) = 1) OR (TYPEOF(trim̲2[1]) <> TYPEOF(trim̲2[2]));

46ページ

4.4.36

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティ composite̲curve̲segment のEXPRESSによる定義を変更してfounded̲item の下位型とし,

属性 parent̲curve の表現コンテキストを与える。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY composite̲curve̲segment

SUBTYPE OF (founded̲item);

transition

same̲sense

: transition̲code;

: BOOLEAN;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

7

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

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;

(*

次の備考を,エンティティ記述の末尾に挿入する。

備考 composite̲curve̲segment は,geometric̲representation̲item の下位型ではない。したがって,こ

の composite̲curve̲segment から構成された composite̲courve を用いる representation の場合,

属性 parent̲curve のインスタンスである bounded̲curve は,それぞれの representation の

geometric̲representation̲context に対して,通常の方法では関連付けられない。

geometric̲representation̲context は,上位型の founded̲item を通じて関連付けられる。

63ページ

4.4.58

エンティティ surface̲of̲revolution のEXPRESSによる定義は,DERIVE文に誤りがある。従来の追補1

における訂正は,すべてのコンパイラに適合しなかった。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY surface̲of̲revolution

SUBTYPE OF (swept̲surface);

axis̲position

: axis1̲placement;

DERIVE

axis̲line : line := representation̲item('')||

geometric̲representation̲item()|| curve()||

line(axis̲position.location, representation̲item('')||

geometric̲representation̲item()||

vector(axis̲position.z, 1.0));

END̲ENTITY;

(*

71ページ

4.4.67

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

8

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

エンティティ curve̲bounded̲surface のEXPRESSによる定義の WR1 に誤りがある。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

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) OR

(SIZEOF (QUERY (temp <* boundaries |

'GEOMETRY̲SCHEMA.OUTER̲BOUNDARY̲CURVE' IN TYPEOF(temp))) = 0);

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;

(*

74ページ

4.4.70

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティ rectangular̲composite̲surface のEXPRESSによる定義は,WR1 において,空の集合と誤

った比較をしている。EXPRESSによる定義の WR1 を,次と置き換える。

WR1: SIZEOF(QUERY (s <* segments | n̲v <> SIZEOF (s))) = 0;

75ページ

4.4.71

次の変更は,従来の追補1に含まれていた内容と同じものである。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

9

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

エンティティ surface̲patch のEXPRESSによる定義を変更して founded̲item の下位型とする。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY surface̲patch

SUBTYPE OF (founded̲item);

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;

(*

次の備考を,エンティティ記述の末尾に挿入する。

備考 surface̲patch は,geometric̲representation̲item の下位型ではない。したがって,この

surface̲patch から構成された rectangular̲composite̲surface を用いる representation の場合,属

性 parent̲surface のインスタンスである bounded̲surface は,それぞれの representation の

geometric̲representation̲context に対して,通常の方法では関連付けられない。

geometric̲representation̲context は,上位型の founded̲item を通じて関連付けられる。

78ページ

4.6.1

関数 dimension̲of のEXPRESSによる定義は,cartesian̲point, direction 又は vector が関数の内部で生成

されたときに dimension̲count を戻り値として返さない。文章及びEXPRESSによる定義を削除して次と

置き換える。

4.6.1 dimension̲of 関数 dimension̲of は,入力 geometric̲representation̲item の次元数を戻す。入力

が cartesian̲point, direction 又は vector であるとき,その要素の個数を直接数えることで次元数を得るも

のとする。

他のすべての下位型については,入力 geometric̲representation̲item が幾何的に基礎付けられている

geometric̲representation̲context の整数dimension̲count を次元数とする。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

10

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

大域規則 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;

dim : dimension̲count;

END̲LOCAL;

-- cartesian̲point, direction 又は vector については,次元数は,

-- その要素の個数を数えることで決まる。

IF 'GEOMETRY̲SCHEMA.CARTESIAN̲POINT' IN TYPEOF(item) THEN

dim := SIZEOF(item¥cartesian̲point.coordinates);

RETURN(dim);

END̲IF;

IF 'GEOMETRY̲SCHEMA.DIRECTION' IN TYPEOF(item) THEN

dim := SIZEOF(item¥direction.direction̲ratios);

RETURN(dim);

END̲IF;

IF 'GEOMETRY̲SCHEMA.VECTOR' IN TYPEOF(item) THEN

dim := SIZEOF(item¥vector.orientation¥direction.direction̲ratios);

RETURN(dim);

END̲IF;

-- geometric̲representation̲item の他のすべての下位型については,

-- dim の値はコンテキストで決まる。item が使われている

-- representation の集合を見つける。

x := using̲representations(item);

-- geometric̲representation̲context の dimension̲count を決定する。

-- context̲of̲items が geometric̲representation̲context であり,

-- x のすべての値に対して同じ dimension̲count をもつことは,

-- 規則 compatible̲dimension によって保証されている。

-- representation̲item の WR1 の制約に基づき,集合 x は空でない。

y := x[1].context̲of̲items;

dim := y¥geometric̲representation̲context.coordinate̲space̲dimension;

RETURN (dim);

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

11

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

END̲FUNCTION;

(*

81ページ

4.6.6

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 base̲axis のEXPRESSによる定義は,変数 u に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION base̲axis(dim : INTEGER; axis1, axis2, axis3 : direction) :

LIST [2:3] OF direction;

LOCAL

u

: LIST [2:3] OF direction;

factor : REAL;

d1, d2 : direction;

END̲LOCAL;

IF (dim = 3) THEN

d1 := NVL(normalise(axis3), dummy̲gri || direction([0.0,0.0,1.0]));

d2 := first̲proj̲axis(d1,axis1);

u := [d2, second̲proj̲axis(d1,d2,axis2), d1];

ELSE

IF EXISTS(axis1) THEN

d1 := normalise(axis1);

u := [d1, orthogonal̲complement(d1)];

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

d1 := normalise(axis2);

u := [orthogonal̲complement(d1), d1];

u[1].direction̲ratios[1] := -u[1].direction̲ratios[1];

u[1].direction̲ratios[2] := -u[1].direction̲ratios[2];

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

12

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

ELSE

u := [dummy̲gri || direction([1.0, 0.0]), dummy̲gri ||

direction([0.0, 1.0])];

END̲IF;

END̲IF;

END̲IF;

RETURN(u);

END̲FUNCTION;

(*

83ページ

4.6.7

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 build̲2axes のEXPRESSによる定義は,戻り値に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION build̲2axes(ref̲direction : direction) :

LIST [2:2] OF direction;

LOCAL

d : direction := NVL(normalise(ref̲direction),

dummy̲gri || direction([1.0,0.0]));

END̲LOCAL;

RETURN([d, orthogonal̲complement(d)]);

END̲FUNCTION;

(*

83ページ

4.6.8

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 build̲axes のEXPRESSによる定義は,戻り値に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION build̲axes(axis, ref̲direction : direction) :

LIST [3:3] OF direction;

LOCAL

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

13

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

d1, d2 : direction;

END̲LOCAL;

d1 := NVL(normalise(axis), dummy̲gri || direction([0.0,0.0,1.0]));

d2 := first̲proj̲axis(d1, ref̲direction);

RETURN([d2, normalise(cross̲product(d1,d2)).orientation, d1]);

END̲FUNCTION;

(*

84ページ

4.6.9

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 orthogonal̲complement のEXPRESSによる定義は,変数 result に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION orthogonal̲complement(vec : direction) : direction;

LOCAL

result : direction ;

END̲LOCAL;

IF (vec.dim <> 2) OR NOT EXISTS (vec) THEN

RETURN(?);

ELSE

result := dummy̲gri || direction([-vec.direction̲ratios[2],

vec.direction̲ratios[1]]);

RETURN(result);

END̲IF;

END̲FUNCTION;

(*

84ページ

4.6.10

関数 first̲proj̲axis のEXPRESSによる定義は,変数 v を適切に初期化していない。入力引数 z̲axis の

値が方向 (-1, 0, 0) 及び arg が暗黙の値をもつとき,関数は有効な値を戻さない。3番目の文章を次と置

き換える。

ただし,z̲axis が (1, 0, 0) 又は (-1, 0, 0) の場合には,arg の暗黙値として (0, 1, 0) が用いられる。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

14

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION first̲proj̲axis(z̲axis, arg : direction) : direction;

LOCAL

x̲axis : direction;

v

: direction;

z

: direction;

x̲vec : vector;

END̲LOCAL;

IF (NOT EXISTS(z̲axis)) THEN

RETURN (?) ;

ELSE

z := normalise(z̲axis);

IF NOT EXISTS(arg) THEN

IF ((z.direction̲ratios <> [1.0,0.0,0.0]) AND

(z.direction̲ratios <> [-1.0,0.0,0.0])) THEN

v := dummy̲gri || direction([1.0,0.0,0.0]);

ELSE

v := dummy̲gri || direction([0.0,1.0,0.0]);

END̲IF;

ELSE

IF (arg.dim <> 3) THEN

RETURN (?) ;

END̲IF;

IF ((cross̲product(arg,z).magnitude) = 0.0) THEN

RETURN (?);

ELSE

v := normalise(arg);

END̲IF;

END̲IF;

x̲vec := scalar̲times̲vector(dot̲product(v, z), z);

x̲axis := vector̲difference(v, x̲vec).orientation;

x̲axis := normalise(x̲axis);

END̲IF;

RETURN(x̲axis);

END̲FUNCTION;

(*

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

15

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

85ページ

4.6.11

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 second̲proj̲axis のEXPRESSによる定義は,変数 v に適切な値を代入していない。EXPRESSに

よる定義を削除して次と置き換える。

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

v := dummy̲gri || 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;

(*

86ページ

4.6.12

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 cross̲product のEXPRESSによる定義は,変数 res 及び変数 result に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION cross̲product (arg1, arg2 : direction) : vector;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

16

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

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 := dummy̲gri || direction([(v1[2]*v2[3] - v1[3]*v2[2]),

(v1[3]*v2[1] - v1[1]*v2[3]), (v1[1]*v2[2] - v1[2]*v2[1])]);

mag := 0.0;

REPEAT i := 1 TO 3;

mag := mag + res.direction̲ratios[i]*res.direction̲ratios[i];

END̲REPEAT;

IF (mag > 0.0) THEN

result := dummy̲gri || vector(res, SQRT(mag));

ELSE

result := dummy̲gri || vector(arg1, 0.0);

END̲IF;

RETURN(result);

END;

END̲IF;

END̲FUNCTION;

(*

88ページ

4.6.14

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 normalise のEXPRESSによる定義は,変数 v に適切な値を代入しておらず,入力引数 arg の値を

壊すことがある。EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION normalise (arg : vector̲or̲direction) : vector̲or̲direction;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

17

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

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;

IF 'GEOMETRY̲SCHEMA.VECTOR' IN TYPEOF(arg) THEN

BEGIN

v := dummy̲gri || direction(arg.orientation.direction̲ratios);

IF arg.magnitude = 0.0 THEN

RETURN(?);

ELSE

vec := dummy̲gri || vector (v, 1.0);

END̲IF;

END;

ELSE

v := dummy̲gri || direction (arg.direction̲ratios);

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;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

18

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

ELSE

RETURN(?);

END̲IF;

END̲IF;

RETURN (result);

END̲FUNCTION;

(*

89ページ

4.6.15

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 scalar̲times̲vector のEXPRESSによる定義は,変数 result に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

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

RETURN (?) ;

ELSE

IF 'GEOMETRY̲SCHEMA.VECTOR' IN TYPEOF (vec) THEN

v

:= dummy̲gri || direction(vec.orientation.direction̲ratios);

mag := scalar * vec.magnitude;

ELSE

v

:= dummy̲gri || direction(vec.direction̲ratios);

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;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

19

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

result := dummy̲gri || vector(normalise(v), mag);

END̲IF;

RETURN (result);

END̲FUNCTION;

(*

90ページ

4.6.16

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 vector̲sum のEXPRESSによる定義は,変数 res 及び変数 result に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

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

RETURN (?) ;

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

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

20

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

mag2 := 1.0;

vec2 := arg2;

END̲IF;

vec1 := normalise (vec1);

vec2 := normalise (vec2);

ndim := SIZEOF(vec1.direction̲ratios);

mag := 0.0;

res := dummy̲gri || direction(vec1.direction̲ratios);

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 := dummy̲gri || vector( res, SQRT(mag));

ELSE

result := dummy̲gri || vector( vec1, 0.0);

END̲IF;

END;

END̲IF;

RETURN (result);

END̲FUNCTION;

(*

92ページ

4.6.17

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 vector̲difference のEXPRESSによる定義は,変数 res に適切な値を代入していない。EXPRESS

による定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION vector̲difference(arg1, arg2 : vector̲or̲direction) : vector;

LOCAL

result

: vector;

res, vec1, vec2 : direction;

mag, mag1, mag2 : REAL;

ndim

END̲LOCAL;

: INTEGER;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

21

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

IF ((NOT EXISTS (arg1)) OR (NOT EXISTS (arg2))) OR

(arg1.dim <> arg2.dim)

THEN

RETURN (?) ;

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;

res := dummy̲gri || direction(vec1.direction̲ratios);

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 := dummy̲gri || vector( res, SQRT(mag));

ELSE

result := dummy̲gri || vector( vec1, 0.0);

END̲IF;

END;

END̲IF;

RETURN (result);

END̲FUNCTION;

(*

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

22

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

93ページ

4.6.18

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 default̲b̲spline̲knot̲mult のEXPRESSによる定義は,変数 knot̲mult に適切な値を代入していな

い。EXPRESSによる定義を削除して次と置き換える。

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;

IF uniform = uniform̲knots THEN

knot̲mult := [1:up̲knots];

ELSE

IF uniform = quasi̲uniform̲knots THEN

knot̲mult := [1:up̲knots];

knot̲mult[1] := degree + 1;

knot̲mult[up̲knots] := degree + 1;

ELSE

IF uniform = piecewise̲bezier̲knots THEN

knot̲mult := [degree:up̲knots];

knot̲mult[1] := degree + 1;

knot̲mult[up̲knots] := degree + 1;

ELSE

knot̲mult := [0:up̲knots];

END̲IF;

END̲IF;

END̲IF;

RETURN(knot̲mult);

END̲FUNCTION;

(*

94ページ

4.6.19

次の変更は,従来の追補1に含まれていた内容と同じものである。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

23

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

関数 default̲b̲spline̲knots のEXPRESSによる定義は,変数 knots に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

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 := [0:up̲knots];

ishift : INTEGER := 1;

END̲LOCAL;

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;

(*

95ページ

4.6.20

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 default̲b̲spline̲curve̲weights のEXPRESSによる定義は,戻り値に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION default̲b̲spline̲curve̲weights(up̲cp : INTEGER)

: ARRAY [0:up̲cp] OF REAL;

RETURN([1:up̲cp + 1]);

END̲FUNCTION;

(*

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

24

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

96ページ

4.6.21

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 default̲b̲spline̲surface̲weights のEXPRESSによる定義は,戻り値に適切な値を代入していない。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION default̲b̲spline̲surface̲weights(u̲upper, v̲upper: INTEGER)

: ARRAY [0:u̲upper] OF

ARRAY [0:v̲upper] OF REAL;

RETURN([[1:v̲upper + 1]:u̲upper +1]);

END̲FUNCTION;

(*

97ページ

4.6.22

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 constraints̲param̲b̲spline のEXPRESSによる定義は,冗長な変数を宣言している。EXPRESSに

よる定義を削除して次と置き換える。

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, sum : INTEGER;

END̲LOCAL;

(* ノット多重度の和を求める。 *)

sum := knot̲mult[1];

REPEAT i := 2 TO up̲knots;

sum := sum + knot̲mult[i];

END̲REPEAT;

(* すべてのB-スプラインのパラメタ化についての制限を検査する。 *)

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

25

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

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];

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;

(*

99ページ

4.6.25

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 get̲basis̲surface のEXPRESSによる定義は,composite̲curve̲on̲surface から属性 segments を参

照する方法に誤りがある。EXPRESSによる定義を削除して次と置き換える。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

26

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

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;

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.segments);

surfs := get̲basis̲surface(c¥composite̲curve.

segments[1].parent̲curve);

IF n > 1 THEN

REPEAT i := 2 TO n;

surfs := surfs * get̲basis̲surface(c¥composite̲curve.

segments[i].parent̲curve);

END̲REPEAT;

END̲IF;

END̲IF;

RETURN(surfs);

END̲FUNCTION;

(*

102ページ

4.6.28

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

27

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

関数 list̲to̲array のEXPRESSによる定義は,変数 res を適切に初期化していない。従来の追補1によ

る変更は,戻り値に配列の次元を設定していないために,新たな誤りを生じている。EXPRESSによる定

義を削除して次と置き換える。

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

res := [lis[1] : n];

REPEAT i := 2 TO n;

res[low+i-1] := lis[i];

END̲REPEAT;

RETURN(res);

END̲IF;

END̲FUNCTION;

(*

102ページ

4.6.29

関数 make̲array̲of̲array のEXPRESSによる定義は,変数 res を適切に初期化していない。従来の追

補1による変更は,戻り値に配列の次元を設定していないために,新たな誤りを生じている。EXPRESS

による定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION make̲array̲of̲array(lis : LIST[1:?] OF LIST [1:?] OF GENERIC : T;

low1, u1, low2, u2 : INTEGER):

ARRAY [low1:u1] OF ARRAY [low2:u2] OF GENERIC : T;

LOCAL

res

: ARRAY[low1:u1] OF ARRAY [low2:u2] OF GENERIC : T;

END̲LOCAL;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

28

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

(* 入力の次元数が整合していることを検査する。 *)

IF (u1-low1+1) <> SIZEOF(lis) THEN

RETURN (?);

END̲IF;

IF (u2 - low2 + 1 ) <> SIZEOF(lis[1]) THEN

RETURN (?) ;

END̲IF;

(* lis[1] の値を用いて変数 res を初期化する。 *)

res := [list̲to̲array(lis[1], low2, u2) : (u1-low1 + 1)];

REPEAT i := 2 TO HIINDEX(lis);

IF (u2-low2+1) <> SIZEOF(lis[i]) THEN

RETURN (?);

END̲IF;

res[low1+i-1] := list̲to̲array(lis[i], low2, u2);

END̲REPEAT;

RETURN (res);

END̲FUNCTION;

(*

107ページ

5.3

次の変更は,従来の追補1に含まれていた内容と同じものである。

エンティティの定義又は関数中で生成されるエンティティを初期化するには,定数を必要とする。

topological̲representation̲item 型を生成するとき,定数dummy̲tri を定義の一部として用いる。次の新し

い箇条を 5.3.1 として挿入し,箇条 5.3.1〜5.3.5 の番号を順に付け直す。

5.3.1 定数の定義 topological̲representation̲item 型を生成するとき,定数 dummy̲tri を定義の一部と

して用いる。これは,適切な上位型と空文字列をもつ属性 name とを与える。

EXPRESSによる定義

*)

CONSTANT

dummy̲tri : topological̲representation̲item :=

representation̲item('')||

topological̲representation̲item();

END̲CONSTANT;

(*

129ページ

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

29

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

5.5.3

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 edge̲reversed のEXPRESSによる定義は,変数 the̲reverse を適切に初期化していない。属性の値

に関する規程を明確にする。戻り値に用いる変数の型及び局所変数の型の宣言を,関数が実際に戻す値の

型に変更する。

次の文章を削除する。

この関数は,向きが反転されている以外,入力された edge と等価な edge を戻す。

代わりに,次の文章を挿入する。

この関数は,向きが反転されている以外,入力された edge と等価な oriented̲edge を戻す。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION edge̲reversed (an̲edge : edge) : oriented̲edge;

LOCAL

the̲reverse : oriented̲edge;

END̲LOCAL;

IF ('TOPOLOGY̲SCHEMA.ORIENTED̲EDGE' IN TYPEOF (an̲edge) ) THEN

the̲reverse := dummy̲tri ||

edge(an̲edge.edge̲end, an̲edge.edge̲start) ||

oriented̲edge(an̲edge¥oriented̲edge.edge̲element,

NOT (an̲edge¥oriented̲edge.orientation)) ;

ELSE

the̲reverse := dummy̲tri ||

edge(an̲edge.edge̲end, an̲edge.edge̲start) ||

oriented̲edge(an̲edge, FALSE);

END̲IF;

RETURN (the̲reverse);

END̲FUNCTION;

(*

引数定義の内容を削除して次と置き換える。

the̲reverse: (出力) 向きを反転した結果の oriented̲edge 。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

30

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

129ページ

5.5.4

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 path̲reversed のEXPRESSによる定義は,変数 the̲reverse を適切に初期化していない。戻り値に

用いる変数の型及び局所変数の型の宣言を,関数が実際に戻す値の型に変更する。

次の文章を削除する。

この関数は,向きが反転されている以外,入力された path と等価な path を戻す。

代わりに,次の文章を挿入する。

この関数は,向きが反転されている以外,入力された path と等価な oriented̲path を戻す。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION path̲reversed (a̲path : path) : oriented̲path;

LOCAL

the̲reverse : oriented̲path ;

END̲LOCAL;

IF ('TOPOLOGY̲SCHEMA.ORIENTED̲PATH' IN TYPEOF (a̲path) ) THEN

the̲reverse := dummy̲tri ||

path(list̲of̲topology̲reversed (a̲path.edge̲list)) ||

oriented̲path(a̲path¥oriented̲path.path̲element,

NOT(a̲path¥oriented̲path.orientation)) ;

ELSE

the̲reverse := dummy̲tri ||

path(list̲of̲topology̲reversed (a̲path.edge̲list)) ||

oriented̲path(a̲path, FALSE);

END̲IF;

RETURN (the̲reverse);

END̲FUNCTION;

(*

引数定義の内容を削除して次と置き換える。

the̲reverse: (出力) 向きを反転した結果の oriented̲path 。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

31

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

130ページ

5.5.5

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 face̲bound̲reversed のEXPRESSによる定義は,変数 the̲reverse を適切に初期化していない。

a̲face̲bound が face̲outer̲bound 型のとき,戻り値も同じ型とする。EXPRESSによる定義を削除して次

と置き換える。

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 := dummy̲tri ||

face̲bound(a̲face̲bound¥face̲bound.bound,

NOT (a̲face̲bound¥face̲bound.orientation))

|| face̲outer̲bound() ;

ELSE

the̲reverse := dummy̲tri ||

face̲bound(a̲face̲bound.bound,

NOT(a̲face̲bound.orientation));

END̲IF;

RETURN (the̲reverse);

END̲FUNCTION;

(*

130ページ

5.5.6

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 face̲reversed のEXPRESSによる定義は,変数 the̲reverse を適切に初期化していない。戻り値に

用いる変数の型及び局所変数の型の宣言を,関数が実際に戻す値の型に変更する。

次の文章を削除する。

この関数は,向きが反転されている以外,入力された face と等価な face を戻す。

代わりに,次の文章を挿入する。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

32

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

この関数は,向きが反転されている以外,入力された face と等価な oriented̲face を戻す。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION face̲reversed (a̲face : face) : oriented̲face;

LOCAL

the̲reverse : oriented̲face ;

END̲LOCAL;

IF ('TOPOLOGY̲SCHEMA.ORIENTED̲FACE' IN TYPEOF (a̲face) ) THEN

the̲reverse := dummy̲tri ||

face(set̲of̲topology̲reversed(a̲face.bounds)) ||

oriented̲face(a̲face¥oriented̲face.face̲element,

NOT (a̲face¥oriented̲face.orientation)) ;

ELSE

the̲reverse := dummy̲tri ||

face(set̲of̲topology̲reversed(a̲face.bounds)) ||

oriented̲face(a̲face, FALSE) ;

END̲IF;

RETURN (the̲reverse);

END̲FUNCTION;

(*

引数定義の内容を削除して次と置き換える。

the̲reverse: (出力) 向きを反転した結果の oriented̲face 。

131ページ

5.5.7

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 shell̲reversed のEXPRESSによる定義は,変数 the̲reverse を適切に初期化しておらず,計算途中

の値を代入することもない。2 個の新しい関数を呼ぶことで,関数の構造を簡潔なものとする。

次の文章を削除する。

この関数は,向きが反転されている以外,入力された shell と等価な shell を戻す。

代わりに,次の文章を挿入する。

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

33

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

この関数は,向きが反転されている以外,入力された shell と等価な oriented̲open̲shell 又は

oriented̲closed̲shell を戻す。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION shell̲reversed (a̲shell : shell) : shell;

IF ('TOPOLOGY̲SCHEMA.OPEN̲SHELL' IN TYPEOF (a̲shell) ) THEN

RETURN (open̲shell̲reversed (a̲shell));

ELSE

IF ('TOPOLOGY̲SCHEMA.CLOSED̲SHELL' IN TYPEOF (a̲shell) ) THEN

RETURN (closed̲shell̲reversed (a̲shell));

ELSE

RETURN (?);

END̲IF;

END̲IF;

END̲FUNCTION;

(*

引数定義から,the̲reverse を削除して,次と置き換える。

: (出力) 向きを反転した結果。

132ページ

5.5.8

この追補による変更で示されているとおり,topology̲schema では新しい関数を必要とする。箇条 5.5.8

〜5.5.20 の番号を順に付け直してそれぞれ 5.5.10〜5.5.22とし,次に示す関数を 5.5.8 及び 5.5.9 として,

挿入する。

5.5.8 closed̲shell̲reversed この関数は,各要素の向きが反転されている以外,入力された closed̲shell

と等価な oriented̲closed̲shell を戻す。

EXPRESSによる定義

*)

FUNCTION closed̲shell̲reversed (a̲shell : closed̲shell) :

oriented̲closed̲shell;

LOCAL

the̲reverse : oriented̲closed̲shell;

END̲LOCAL;

IF ('TOPOLOGY̲SCHEMA.ORIENTED̲CLOSED̲SHELL' IN TYPEOF (a̲shell) ) THEN

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

34

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

the̲reverse := dummy̲tri ||

connected̲face̲set (

a̲shell¥connected̲face̲set.cfs̲faces) ||

closed̲shell () || oriented̲closed̲shell(

a̲shell¥oriented̲closed̲shell.closed̲shell̲element,

NOT(a̲shell¥oriented̲closed̲shell.orientation));

ELSE

the̲reverse := dummy̲tri ||

connected̲face̲set (

a̲shell¥connected̲face̲set.cfs̲faces) ||

closed̲shell () ||

oriented̲closed̲shell (a̲shell, FALSE);

END̲IF;

RETURN (the̲reverse);

END̲FUNCTION;

(*

引数定義

a̲shell: (入力) 向きが逆にされる closed̲shell 。

the̲reverse: (出力) 向きを反転した結果。

5.5.9 open̲shell̲reversed この関数は,各要素の向きが反転されている以外,入力された open̲shell と

等価な oriented̲open̲shell を戻す。

EXPRESSによる定義

*)

FUNCTION open̲shell̲reversed ( a̲shell : open̲shell) :

oriented̲open̲shell;

LOCAL

the̲reverse : oriented̲open̲shell;

END̲LOCAL;

IF ('TOPOLOGY̲SCHEMA.ORIENTED̲OPEN̲SHELL' IN TYPEOF (a̲shell) ) THEN

the̲reverse := dummy̲tri ||

connected̲face̲set (

a̲shell¥connected̲face̲set.cfs̲faces) ||

open̲shell () || oriented̲open̲shell(

a̲shell¥oriented̲open̲shell.open̲shell̲element,

(NOT (a̲shell¥oriented̲open̲shell.orientation)));

ELSE

the̲reverse := dummy̲tri ||

connected̲face̲set (

a̲shell¥connected̲face̲set.cfs̲faces) ||

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

35

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

open̲shell () ||

oriented̲open̲shell (a̲shell, FALSE);

END̲IF;

RETURN (the̲reverse);

END̲FUNCTION;

(*

引数定義

a̲shell: (入力) 向きが逆にされる open̲shell 。

the̲reverse: (出力) 向きを反転した結果。

133ページ

5.5.10

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 boolean̲choose のEXPRESSによる定義は,ラベル付けされていない総称データ型を戻り値として

いる。JIS B 3700-11 の 9.5.3.2 の規則及び制約 (b) によると,関数の戻り値に総称データ型を用いるとき,

型ラベルが必要であり,実引数に対して宣言される型ラベルを参照しなければならない。実引数と戻り値

とは,与えられた型ラベルでなければならない。ここで用いる型ラベルは“item”とする。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION boolean̲choose (b : boolean;

choice1, choice2 : generic : item) : generic : item;

IF b THEN

RETURN (choice1);

ELSE

RETURN (choice2);

END̲IF;

END̲FUNCTION;

(*

136ページ

5.5.17

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 mixed̲loop̲type̲set のEXPRESSによる定義は,使用していない変数の宣言を含んでいる。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

36

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

FUNCTION mixed̲loop̲type̲set(l: SET[0:?] OF loop): LOGICAL;

LOCAL

poly̲loop̲type: LOGICAL;

END̲LOCAL;

IF(SIZEOF(l) <= 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;

(*

139ページ

6.

エンティティ box̲domain の修正後の記述と合わせるために,geometric̲model̲schema のEXPRESSに

よる定義に,スキーマ外への参照を追加する必要がある。文章及びEXPRESSによる定義を削除して次と

置き換える。

次のEXPRESS宣言は,geometric̲model̲schema を開始し,必要な外部参照を明らかにする。

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);

REFERENCE FROM representation̲schema(founded̲item);

(*

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

geometry̲schema

この規格の4.

topology̲schema

この規格の5.

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

37

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

measure̲schema

JIS B 3700-41

representation̲schema JIS B 3700-43

2. このスキーマの図式表現を附属書Dの図D.16〜D.18に示す。

152ページ

6.4.15

エンティティ revolved̲face̲solid のEXPRESSによる定義は,DERIVE文に誤りがある。従来の追補1

における訂正は,すべてのコンパイラに適合しなかった。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY revolved̲face̲solid

SUBTYPE OF (swept̲face̲solid);

axis : axis1̲placement;

angle : plane̲angle̲measure;

DERIVE

axis̲line : line := representation̲item('')||

geometric̲representation̲item()|| curve()||

line(axis.location, representation̲item('')||

geometric̲representation̲item()||

vector(axis.z, 1.0));

END̲ENTITY;

(*

154ページ

6.4.18

エンティティ revolved̲area̲solid のEXPRESSによる定義は,DERIVE文に誤りがある。従来の追補1

における訂正は,すべてのコンパイラに適合しなかった。

EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY revolved̲area̲solid

SUBTYPE OF (swept̲area̲solid);

axis : axis1̲placement;

angle : plane̲angle̲measure;

DERIVE

axis̲line : line := representation̲item('')||

geometric̲representation̲item()|| curve()||

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

38

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

line(axis.location, representation̲item('')||

geometric̲representation̲item()||

vector(axis.z, 1.0));

END̲ENTITY;

(*

155ページ

6.4.21

エンティティ box̲domain のEXPRESSによる定義は,属性 corner の定義に用いられる cartesian̲point

が幾何的に基礎付けられることを保証していない。EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

ENTITY box̲domain

SUBTYPE OF (founded̲item);

corner : cartesian̲point;

xlength : positive̲length̲measure;

ylength : positive̲length̲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;

(*

160ページ

6.5.1

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 acyclic̲solid̲replica のEXPRESSによる定義は,エンティティsolid̲replica のスキーマを適切に参

照していない。EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION acyclic̲solid̲replica(rep : solid̲replica;

parent : solid̲model) : BOOLEAN;

IF NOT (('GEOMETRIC̲MODEL̲SCHEMA.SOLID̲REPLICA') IN

TYPEOF(parent)) THEN

RETURN (TRUE);

END̲IF;

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

39

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

(* 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;

(*

160ページ

6.5.2

次の変更は,従来の追補1に含まれていた内容と同じものである。

関数 acyclic̲set̲replica のEXPRESSによる定義は,エンティティgeometric̲set̲replica のスキーマを適

切に参照していない。EXPRESSによる定義を削除して次と置き換える。

EXPRESSによる定義

*)

FUNCTION acyclic̲set̲replica(rep : geometric̲set̲replica;

parent : geometric̲set) : BOOLEAN;

IF NOT (('GEOMETRIC̲MODEL̲SCHEMA.GEOMETRIC̲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;

(*

162ページ

6.5.5

関数 build̲transformed̲set のEXPRESSによる定義は,使用していない変数の宣言を含んでおり,

curve̲replica,point̲replica 及び surface̲replica の不完全なインスタンスを生成している。EXPRESSによ

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

40

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

る定義を削除して次と置き換える。

EXPRESSによる定義

*)

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 := [];

END̲LOCAL;

REPEAT j := 1 TO SIZEOF(s);

IF ('GEOMETRY̲SCHEMA.CURVE' IN TYPEOF(s[j])) THEN

trset := trset + dummy̲gri || curve() || curve̲replica(s[j],tr); ELSE

IF ('GEOMETRY̲SCHEMA.POINT' IN TYPEOF(s[j])) THEN

trset := trset + dummy̲gri || point() || point̲replica(s[j],tr);

ELSE

IF ('GEOMETRY̲SCHEMA.SURFACE' IN TYPEOF(s[j])) THEN

trset := trset + dummy̲gri || surface() || surface̲replica(s[j],

tr || cartesian̲transformation̲operator̲3d (?));

END̲IF;

END̲IF;

END̲IF;

END̲REPEAT;

RETURN(trset);

END̲FUNCTION;

(*

163ページ

6.5.5

次の変更は,従来の追補1に含まれていた内容と同じものである。

アプリケーション翻案構成体 (AIC) の3個の部が参照している関数 msb̲shells が必要である。次に示

す関数を箇条 6.5.5 の直後に,挿入する。

6.5.6 msb̲shells この関数は,manifold̲solid̲brep の定義に用いられているすべての closed̲shell の集

合を生成する。manifold̲solid̲brep の下位型 brep̲with̲voids の場合にも生成する。

EXPRESSによる定義

*)

FUNCTION msb̲shells (brep: manifold̲solid̲brep) :

SET [1:?] OF closed̲shell;

page

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

41

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

IF SIZEOF (QUERY (msbtype <* TYPEOF (brep) |

msbtype LIKE '*BREP̲WITH̲VOIDS')) >= 1 THEN

RETURN (brep¥brep̲with̲voids.voids + brep.outer);

ELSE

RETURN([brep.outer]);

END̲IF;

END̲FUNCTION;

(*

引数定義

brep: (入力) closed̲shell の集合を求める manifold̲solid̲brep 。

: (出力) brep を定義するすべての closed̲shell の集合。

164ページ

附属書A

この追補で認識された変更にともない,表A.1 のエンティティの短縮名に不足が生じた。次に示す欄の

各々について,エンティティ名が正しいアルフベット順となるように 表A.1 に挿入する。

エンティティ名

短縮名

168ページ

附属書B

この追補で認識された変更にともない,文書識別子及びスキーマの情報オブジェクト識別子が変更され

た。この規格のオブジェクト識別子に関する記述を削除して次と置き換える。

開放型システムで情報オブジェクトをあいまいさなく識別するために,次のオブジェクト識別子をこの

規格自身に割り当てる。

{ iso standard 10303 part(42) version(5) }

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

geometry̲schema のオブジェクト識別子に関する記述を削除して次と置き換える。

開放型システムで geometry̲schema (4.参照) をあいまいさなく識別するために,geometry̲schema に対

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

42

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

して,次のオブジェクト識別子が割り当てられている。

{ iso standard 10303 part(42) version(5) object(1) geometry-schema(1) }

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

topology̲schema のオブジェクト識別子に関する記述を削除して次と置き換える。

開放型システムで topology̲schema (5.参照) をあいまいさなく識別するために, topology̲schema に対

して,次のオブジェクト識別子が割り当てられている。

{ iso standard 10303 part(42) version(5) object(1) topology-schema(2) }

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

geometric̲model̲schema のオブジェクト識別子に関する記述を削除して次と置き換える。

開放型システムで geometric̲model̲schema (6.参照) をあいまいさなく識別するために,

geometric̲model̲schema に対して,次のオブジェクト識別子が割り当てられている。

{ iso standard 10303 part(42) version(5) object(1) geometric-model-schema(3) }

この値の意味は,ISO/IEC 8824-1 で定義され,JIS B 3700-1 で規定されている。

167ページ

附属書C

この追補で認識された変更にともない,EXPRESSによる定義を含む URL は変更された。この附属書の

内容を削除し,次と置き換える。

この附属書は,EXPRESS エンティティの名称に対応する短縮名の一覧,及びこの規格における

EXPRESSによる定義の一覧を示す。ただし,注釈又はその他の説明文は,含まれていない。この附属書

は,計算機可読形式だけで提供され,次の URL で見ることができる。

短縮名 : http://www.mel.nist.gov/div826/subject/apde/snr/

EXPRESS : http://www.mel.nist.gov/step/parts/part042/is/tc3/

これらのサイトに接続するのが困難な場合には,ISO 中央事務局へ連絡するか,又は

sc4sec@cme.nist.gov の ISO/TC 184/SC 4 事務局へ直接連絡する。

備考 上の URL で計算機可読形式で提供する情報は参考とする。この規格本体に記述されているも

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

43

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

のを本来の規定とする。

177・179ページ

附属書D

この追補で認識された変更にともない,図式表現 EXPRESS-G に誤りが生じた。

図D.3,図D.8,図D.11 及び 図D.17 の内容を次のページと置き換える。

page

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

44

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

附属書D図D.3 geometry̲schema の EXPRESS-G による図式表現(3/12)

― point の下位型

page

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

45

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

附属書D図D.8 geometry̲schema の EXPRESS-G による図式表現(8/12)

― bounded̲curve の下位型

page

2019年7月1日の法改正により名称が変わりました。まえがきを除き,本規格中の「日本工業規格」を「日本産業規格」に読み替えてください。

46

B 3700-42:2005 (ISO 10303-42:1994/Cor.3:2001)

附属書D図D.11 geometry̲schema の EXPRESS-G による図式表現(11/12)

― bounded̲surface の下位型

附属書D図D.17 geometry̲schema の EXPRESS-G による図式表現(2/3)

― bounded̲surface の下位型