GHL 3.3 リリースノート

本ドキュメントでは、 GHL の 3.2.2 から 3.3 へのバージョンアップの内容 について述べています。

GHL 3.3 では主に 「スイーピング/スキニング曲面の生成」と 「2次元での許容誤差処理の改善」 が達成されています。



バージョンアップの概要

・3次元:スイーピング曲面の生成

3次元空間において、ある曲線A (プロファイル) を別の曲線B (スイープパス) に沿って 掃引した軌跡を表す曲面を生成するための 関数群を追加しました。 ここで、曲線A、Bは多項式/有理Bスプライン曲線、生成される曲面は多項式/有理Bスプライン曲面です。

GHLでは、この機能をある一つの関数として提供するのではなく、 この機能を実現する際の一連の処理ステージのそれぞれに対して (個々に独立した) 複数の関数を用意しています。 GHLの利用者は、これらの関数を組み合わせたり、 必要に応じて独自の処理を組み込んだりすることで 様々なスイーピング曲面を生成することができます。

サンプルコード : ghlv3/etc/EXAMPLES/sweep_skin/sweeping.c

・3次元:スキニング曲面の生成

3次元空間において、複数の曲線の間を補間するような曲面を生成するための 関数群を追加しました。 ここで、与えられる曲線群は多項式/有理Bスプライン曲線、生成される曲面は多項式/有理Bスプライン曲面です。

この機能についても「スイーピング曲面の生成」同様、 ある一つの関数として提供するのではなく、 この機能を実現する際の一連の処理ステージのそれぞれに対して (個々に独立した) 複数の関数を用意しています。 GHLの利用者は、これらの関数を組み合わせたり、 必要に応じて独自の処理を組み込んだりすることで 様々なスキニング曲面を生成することができます。

サンプルコード : ghlv3/etc/EXAMPLES/sweep_skin/skinning.c

・3次元:フィレット挿入関数の出力から有理自由曲面を生成する機能

3次元のフィレット関数群が出力するフィレットデータから、有理自由曲面を生成するための 関数を追加しました。

実際には、円弧を表す3点 (中心、開始点、終了点) の列を、有理Bスプライン曲線の列に変換します。 この曲線列は、「スイーピイング/スキニング曲面の生成」で用いられる 補間/近似関数 により、有理Bスプライン曲面に変換することが可能です。

・2/3次元:曲線/曲面のスケーリング

任意の曲線/曲面を拡大/縮小する 関数を追加しました。 この機能では、与えられた形状要素の属する座標系の原点を拡大/縮小の中心としています。 GHLには曲線/曲面を平行移動させる関数が既に存在しますので、 この拡大/縮小機能をその平行移動の機能と組み合わせることで、 任意の点を中心とした形状要素の拡大/縮小が可能です。

・2次元:曲線に対する点の左右判定:追加

ある点と開いた有限な曲線を与えられ、その点が曲線の左右どちら側にあるかを判定する 関数を追加しました。 ここで与えられる開いた有限曲線は比較的単調であり、 さらに点はこの曲線からそれほど離れていないことを前提として、 曲線上の点で与えられた点にもっとも近いところを基準として左右を判定します。

なお、この改造に伴い、既存の関数を一部のインタフェイスを変更しました。

gh2sidePnt[Lin,Cir,Ell,Par,Hyp]
無限な曲線/閉じた曲線を扱うこれらの関数は、新規関数と同様に 「右側ならば GH__RIGHT_SIDE、左側ならば GH__LEFT_SIDE、 線上であれば GH__ON_ENTITY」が返却されるようになりました。
gh3sidePntPln
「表側であれば GH__FRONT_SIDE、裏側であれば GH__BACK_SIDE、 面上であれば GH__ON_ENTITY」が返却されるようになりました。
・2/3次元:トリム曲線の生成インタフェイス:追加

線分や円弧を表す最小限の情報からトリム曲線を直接生成する 関数を追加しました。

・2/3次元:トリム曲線/複合曲線の向きの反転

トリム曲線/複合曲線のパラメータの進行方向を反転させる 関数を追加しました。

・2/3次元:Bスプライン曲線の端点のノットを多重にする

Bスプライン曲線の形状を変えずに、端点のノットを多重にする 関数を追加しました。

・3次元:ある点が曲線/曲面上にあるかを調べる:追加

ある点が曲線/曲面上にあるかどうかを調べる 関数について、 すべての曲線/曲面に対応しました。

・2次元:許容誤差処理の改善

GHLは許容誤差値を外部から変更できるような仕組みを持っていますが、 その取り扱いについては統一のとれていない箇所が残っています。 これは例えば、ある演算結果の妥当性について 本来であれば実空間上の距離で判断すべきであろうところを パラメータ空間上の距離で判断している箇所がある、 といったことです。 本バージョンでは、2次元の機能についてはこの不整合を解消しました。 許容誤差の取り扱いについては、「利用の手引き」の 「誤差の扱い」の節を参照して下さい。

この作業の結果、許容誤差の大域変数の名称や利用のされ方が 以下のように変更されています。

	GH__LMT_MEPS : 変更無し (計算機の丸め誤差値)
	GH__LMT_TOL  : 変更無し (距離に対する許容誤差値)
	GH__LMT_ATOL : 変更無し (角度に対する許容誤差値)
	GH__LMT_PTOL : 新規 (パラメータに対する許容誤差値)
	GH__LMT_REPS : 新規 (幾何的根拠の無い許容誤差値、暫定的に存在)
	GH__LMT_EPS  : 削除 (取り敢えずは GH__LMT_REPS の別名にしてあります)
これらの変数 (マクロ) は ghlv3/include/gh_tolerance.h で宣言されています。

上記の変数のうちで、 GHLの利用者側の都合で値が変更されることを想定しているのは、 GH__LMT_TOL, GH__LMT_ATOL, GH__LMT_PTOL の三つです。 GH__LMT_MEPS と GH__LMT_REPS は利用者側で変更されるべきではない、 とお考え下さるようお願いします。

これまで GH__LMT_EPS が持っていた役割は GH__LMT_PTOL と GH__LMT_REPS に 引き継がせました。今後 GH__LMT_EPS は利用しません。 また、GH__LMT_REPS は暫定的な変数で、将来は削除する予定です。 今のところ、GH__LMT_REPS は (幾何的要素を含まない) 純数値計算的な演算と 3次元の演算の一部から参照されています。 これらの箇所は、近い将来に GH__LMT_MEPS を参照するように変更します。

3次元の機能については、大域変数の名称は上記の通りに変更してありますが、 その利用のされ方については統一されていない (本来 GH__LMT_TOL を基準として判断すべきであるが GH__LMT_PTOL の方で判断している等の) 箇所がまだ残っています。 3次元の演算については許容誤差処理の「厳密さ」と「計算量」が どのような関係にあるのかといったことや、 さらにそのトレードオフをどの辺りに置くのが適当なのか といった事柄について、 弊社内部で明確な結論を得られておらず、 GHL 3.3 では3次元の演算の不整合には手をつけていません。 この件については、引き続いて調査/検討を進めますが、 ユーザの皆さんからの御意見も頂けると幸いです。

・3次元:曲線境界曲面の交線処理の改善

曲線境界曲面と他の曲面との交線を求める際に、 交線の全体あるいは一部が曲線境界曲面の境界に一致していると 正しい結果が得られない場合がありました。 GHL 3.3 では、この現象を改善しました。


追加された関数

2次元

gh2genrTrcBLin	線分を生成する
gh2genrTrcBLin2P	始点終点を与えて線分を生成する
gh2genrTrcCArc	円弧を生成する
gh2genrTrcCArc2	円弧を生成する(タイプ2)
gh2genrTrcCArc2PC	中心/始点/終点を与えて円弧を生成する
gh2genrTrcCArc3P	始点/通過点/終点を与えて円弧を生成する
gh2mekmBsc	Bスプライン曲線の端点を多重にする
gh2mekmRBsc	有理Bスプライン曲線の端点を多重にする
gh2rvrsCmc	複合曲線の向きを逆にする
gh2rvrsTrc	トリム曲線の向きを逆にする
gh2scalBsc	Bspline曲線を拡大/縮小させる
gh2scalBzc	ベジエ曲線を拡大/縮小させる
gh2scalCir	円を拡大/縮小させる
gh2scalCmc	複合曲線を拡大/縮小させる
gh2scalCrv	曲線を拡大/縮小させる
gh2scalEll	楕円を拡大/縮小させる
gh2scalHyp	双曲線を拡大/縮小させる
gh2scalLin	直線を拡大/縮小させる
gh2scalLsg	ラインセグメントを拡大/縮小させる
gh2scalPar	放物線を拡大/縮小させる
gh2scalRCrv	曲線を拡大/縮小させる
gh2scalRBsc	有理Bspline曲線を拡大/縮小させる
gh2scalRBzc	有理ベジエ曲線を拡大/縮小させる
gh2scalTrc	トリム曲線を拡大/縮小させる
gh2sidePntBsc	ある点がBスプライン曲線のどちら側にあるかを判定する
gh2sidePntBzc	ある点がベジエ曲線のどちら側にあるかを判定する
gh2sidePntCmc	ある点が複合曲線のどちら側にあるかを判定する
gh2sidePntCrv	ある点が曲線のどちら側にあるかを判定する
gh2sidePntRBsc	ある点が有理Bスプライン曲線のどちら側にあるかを判定する
gh2sidePntRBzc	ある点が有理ベジエ曲線のどちら側にあるかを判定する
gh2sidePntTrc	ある点がトリム曲線のどちら側にあるかを判定する

3次元

gh3aprxBscBss	Bスプライン曲線列をBスプライン曲面で近似する
gh3aprxRBscRBss	有理Bスプライン曲線列を有理Bスプライン曲面で近似する
gh3arspBsc1	閉じたBスプライン曲線列の開始点を揃える(タイプ1)
gh3arspBsc2	閉じたBスプライン曲線列の開始点を揃える(タイプ2)
gh3arspRBsc1	閉じた有理Bスプライン曲線列の開始点を揃える(タイプ1)
gh3arspRBsc2	閉じた有理Bスプライン曲線列の開始点を揃える(タイプ2)
gh3convFltRBsc1	フィレットの出力を有理Bスプライン曲線列に変換する(タイプ1)
gh3convFltRBsc2	フィレットの出力を有理Bスプライン曲線列に変換する(タイプ2)
gh3freeBscL	Bスプライン曲線のリストを解放する
gh3freeRBscL	有理Bスプライン曲線のリストを解放する
gh3genrTrcBLin	線分を生成する
gh3genrTrcBLin2P	始点終点を与えて線分を生成する
gh3genrTrcCArc	円弧を生成する
gh3genrTrcCArc2PC	中心/始点/終点を与えて円弧を生成する
gh3genrTrcCArc3P	始点/通過点/終点を与えて円弧を生成する
gh3intpBscBss	Bスプライン曲線列をBスプライン曲面で補間する
gh3intpRBscRBss	有理Bスプライン曲線列を有理Bスプライン曲面で補間する
gh3mekmBsc	Bスプライン曲線の端点を多重にする
gh3mekmRBsc	有理Bスプライン曲線の端点を多重にする
gh3mksiBsc	Bスプライン曲線列のノット列/次数/制御点の数を揃える
gh3mksiRBsc	有理Bスプライン曲線列のノット列/次数/制御点の数を揃える
gh3onckPntBsc	ある点がBスプライン曲線上にあるかどうかを判定する
gh3onckPntBss	ある点がBスプライン曲面上にあるかどうかを判定する
gh3onckPntBzc	ある点がベジエ曲線上にあるかどうかを判定する
gh3onckPntBzs	ある点がベジエ曲面上にあるかどうかを判定する
gh3onckPntCbs	ある点が曲線境界曲面上にあるかどうかを判定する
gh3onckPntCmc	ある点が複合曲線上にあるかどうかを判定する
gh3onckPntCon	ある点が円錐上にあるかどうかを判定する
gh3onckPntCyl	ある点が円柱上にあるかどうかを判定する
gh3onckPntLes	ある点が柱面上にあるかどうかを判定する
gh3onckPntRBsc	ある点が有理Bスプライン曲線上にあるかどうかを判定する
gh3onckPntRBss	ある点が有理Bスプライン曲面上にあるかどうかを判定する
gh3onckPntRBzc	ある点が有理ベジエ曲線上にあるかどうかを判定する
gh3onckPntRBzs	ある点が有理ベジエ曲面上にあるかどうかを判定する
gh3onckPntRts	ある点が矩形有限曲面上にあるかどうかを判定する
gh3onckPntRvs	ある点が回転面上にあるかどうかを判定する
gh3onckPntSph	ある点が球上にあるかどうかを判定する
gh3onckPntTrc	ある点がトリム曲線上にあるかどうかを判定する
gh3rvrsCmc	複合曲線の向きを逆にする
gh3rvrsTrc	トリム曲線の向きを逆にする
gh3scalBsc	Bspline曲線を拡大/縮小させる
gh3scalBss	Bspline曲面を拡大/縮小させる
gh3scalBzc	ベジエ曲線を拡大/縮小させる
gh3scalBzs	ベジエ曲面を拡大/縮小させる
gh3scalCbs	曲線境界曲面を拡大/縮小させる
gh3scalCir	円を拡大/縮小させる
gh3scalCmc	複合曲線を拡大/縮小させる
gh3scalCon	円錐を拡大/縮小させる
gh3scalCrv	曲線を拡大/縮小させる
gh3scalCyl	円柱を拡大/縮小させる
gh3scalEll	楕円を拡大/縮小させる
gh3scalHyp	双曲線を拡大/縮小させる
gh3scalLes	柱面を拡大/縮小させる
gh3scalLin	直線を拡大/縮小させる
gh3scalLsg	ラインセグメントを拡大/縮小させる
gh3scalPar	放物線を拡大/縮小させる
gh3scalPln	平面を拡大/縮小させる
gh3scalRBsc	有理Bspline曲線を拡大/縮小させる
gh3scalRBss	有理Bspline曲面を拡大/縮小させる
gh3scalRBzc	有理ベジエ曲線を拡大/縮小させる
gh3scalRBzs	有理ベジエ曲面を拡大/縮小させる
gh3scalRCrv	曲線を拡大/縮小させる
gh3scalRSrf	曲面を拡大/縮小させる
gh3scalRts	矩形有限面を拡大/縮小させる
gh3scalRvs	回転面を拡大/縮小させる
gh3scalSph	球を拡大/縮小させる
gh3scalSrf	曲面を拡大/縮小させる
gh3scalTrc	トリム曲線を拡大/縮小させる
gh3swepBscCPY1	プロファイルを平行移動してコピーする(Bスプライン曲線)
gh3swepBscCPY2	プロファイルをスイープパスのフルネ枠の変化に応じてコピーする(Bスプライン曲線)
gh3swepBscCPY3	プロファイルをスイープパスの接ベクトルの変化に応じてコピーする(Bスプライン曲線)
gh3swepBscDIV1	スイープパスをパラメータ等分割する(Bスプライン曲線)
gh3swepBscDIV2	スイープパスを等分割する(Bスプライン曲線)
gh3swepBscDIV3	スイープパスのノット点を求める(Bスプライン曲線)
gh3swepBscDIV4	スイープパスをポリライン近似する(Bスプライン曲線)
gh3swepRBscCPY1	プロファイルを平行移動してコピーする(有理Bスプライン曲線)
gh3swepRBscCPY2	プロファイルをスイープパスのフルネ枠の変化に応じてコピーする(有理Bスプライン曲線)
gh3swepRBscCPY3	プロファイルをスイープパスの接ベクトルの変化に応じてコピーする(有理Bスプライン曲線)
gh3swepRBscDIV1	スイープパスをパラメータ等分割する(有理Bスプライン曲線)
gh3swepRBscDIV2	スイープパスを等分割する(有理Bスプライン曲線)
gh3swepRBscDIV3	スイープパスのノット点を求める(有理Bスプライン曲線)
gh3swepRBscDIV4	スイープパスをポリライン近似する(有理Bスプライン曲線)

不具合の修正

gh[23]intsTrcTrc
トリム曲線の母線がともに直線あるいは円で、その形状が一致するような場合に、交点が存在しないにも関わらず (- 1)が返却される問題を解決しました。
gh[23]aprc[Bsc,Bss]*, gh[23]intp[Bsc,Bss]*, gh[23]ctrpPnt, gh[23]clgpPnt
2点未満の点列を与えると、不正なメモりアクセスが発生したのを、 エラーリターンするように修正しました。
(GHL 3.2.2 の [23]D_patch04 に収録済み)
gh3convCbsSTri2
境界が大きく凹んでいるような形状に対して正しい結果が得られないことがありました。
(GHL 3.2.2 の 3D_patch03 に収録済み)
gh3iflt* (* は任意の要素タイプ)
フィレット面が閉じるような場合に、正しくcloseフラグを設定していませんでした。
(GHL 3.2.2 の 3D_patch04 に収録済み)
gh3convCbsSTri2
ベース面が平面の場合に、うまく三角形分割できないことがありました。
(GHL 3.2.2 の 3D_patch03 に収録済み)
gh3convRSrfSTri
入力曲面のエリアを解放してしまうことがありました。
(GHL 3.2.2 の 3D_patch03 に収録済み)
gh_utilAchk,gh_utilRca
差分が許容誤差に等しいときに正しく動作しませんでした。
(GHL 3.2.2 の 2D_patch02 に収録済み)
gh2genrBsc[INTP,APRC],gh3genrBs[cs][INTP,APRC]
closed が指定値と逆の振舞いをしていました。
(GHL 3.2.2 の [23]D_patch02 に収録済み)
gh3intsBscPln
プログラムが落ちることがありました。
(GHL 3.2.2 の 3D_patch01 に収録済み)
gh3intsBlnBln
二直線分が平行かどうかの判断が不十分でした。
(GHL 3.2.2 の 3D_patch01 に収録済み)

サポートに関する御連絡は、以下の宛先へお送り下さい。

株式会社 精密形状処理研究所
FAX:03-5276-6478

GHL 企画/開発担当者

企画
柿下 尚武	naokak@pml.co.jp	
長谷川 亨	hasegawa@sra.co.jp
開発
鹿野 信幸	shikano@pml.co.jp
徐 子韜		zitao@pml.co.jp
伊藤 英明	hideit@pml.co.jp

Copyright (c) 1998 Precision Modeling Laboratory,Inc., Tokyo, Japan. All Rights Reserved.