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

B 3700-42

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

(1)

まえがき

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

日本工業規格である,これによって 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 として発行されたものである。

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

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

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

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


日本工業規格

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.14.3.13 の番号を順に付け直す。

4.3.1 

定数の定義    geometric_representation_item 型を生成するとき,定数 dummy_gri を定義の一部とし

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


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.54.4.73 の番号を 4.4.84.4.76 として順に付け直す。次の

新しい図を

図 1  として挿入し,図 113  の番号を  図 214  として順に付け直す。

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


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°未満とする。


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°未満とする。


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;


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    : transition_code;

                  same_sense        : BOOLEAN;


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


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 に含まれていた内容と同じものである。


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  を次元数とする。


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


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


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


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)  が用いられる。


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;

            (*


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;


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;


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;


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;


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


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

                END_LOCAL;


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;

            (*


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 に含まれていた内容と同じものである。


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;

            (*


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-スプラインのパラメタ化についての制限を検査する。 *)


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 による定義を削除して次と置き換える。


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


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;


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.15.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

ページ


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 。


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 。


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 を戻す。

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


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 を戻す。

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


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.105.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


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


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

による定義

            *)


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.


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.16D.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()||


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;


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 によ


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;


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  に挿入する。

エンティティ名

短縮名

CYLINDRICAL_POINT

CYLPNT

POLAR_POINT    

 PLRPNT

SPHERICAL_POINT

 SPHPNT |

168

ページ

附属書 B

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

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

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

規格自身に割り当てる。

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

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

geometry_schema

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

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


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 で計算機可読形式で提供する情報は参考とする。この規格本体に記述されているも


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  の内容を次のページと置き換える。


44

B 3700-42

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

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

 point の下位型


45

B 3700-42

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

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

 bounded_curve の下位型


46

B 3700-42

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

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

 bounded_surface の下位型

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

 bounded_surface の下位型