本ドキュメントでは、 GHL の 3.2.2 から 3.3 へのバージョンアップの内容 について述べています。
GHL 3.3 では主に 「スイーピング/スキニング曲面の生成」と 「2次元での許容誤差処理の改善」 が達成されています。
3次元空間において、ある曲線A (プロファイル) を別の曲線B (スイープパス) に沿って 掃引した軌跡を表す曲面を生成するための 関数群を追加しました。 ここで、曲線A、Bは多項式/有理Bスプライン曲線、生成される曲面は多項式/有理Bスプライン曲面です。
GHLでは、この機能をある一つの関数として提供するのではなく、 この機能を実現する際の一連の処理ステージのそれぞれに対して (個々に独立した) 複数の関数を用意しています。 GHLの利用者は、これらの関数を組み合わせたり、 必要に応じて独自の処理を組み込んだりすることで 様々なスイーピング曲面を生成することができます。
サンプルコード : ghlv3/etc/EXAMPLES/sweep_skin/sweeping.c
3次元空間において、複数の曲線の間を補間するような曲面を生成するための 関数群を追加しました。 ここで、与えられる曲線群は多項式/有理Bスプライン曲線、生成される曲面は多項式/有理Bスプライン曲面です。
この機能についても「スイーピング曲面の生成」同様、 ある一つの関数として提供するのではなく、 この機能を実現する際の一連の処理ステージのそれぞれに対して (個々に独立した) 複数の関数を用意しています。 GHLの利用者は、これらの関数を組み合わせたり、 必要に応じて独自の処理を組み込んだりすることで 様々なスキニング曲面を生成することができます。
サンプルコード : ghlv3/etc/EXAMPLES/sweep_skin/skinning.c
3次元のフィレット関数群が出力するフィレットデータから、有理自由曲面を生成するための 関数を追加しました。
実際には、円弧を表す3点 (中心、開始点、終了点) の列を、有理Bスプライン曲線の列に変換します。 この曲線列は、「スイーピイング/スキニング曲面の生成」で用いられる 補間/近似関数 により、有理Bスプライン曲面に変換することが可能です。
任意の曲線/曲面を拡大/縮小する 関数を追加しました。 この機能では、与えられた形状要素の属する座標系の原点を拡大/縮小の中心としています。 GHLには曲線/曲面を平行移動させる関数が既に存在しますので、 この拡大/縮小機能をその平行移動の機能と組み合わせることで、 任意の点を中心とした形状要素の拡大/縮小が可能です。
ある点と開いた有限な曲線を与えられ、その点が曲線の左右どちら側にあるかを判定する 関数を追加しました。 ここで与えられる開いた有限曲線は比較的単調であり、 さらに点はこの曲線からそれほど離れていないことを前提として、 曲線上の点で与えられた点にもっとも近いところを基準として左右を判定します。
なお、この改造に伴い、既存の関数を一部のインタフェイスを変更しました。
線分や円弧を表す最小限の情報からトリム曲線を直接生成する 関数を追加しました。
トリム曲線/複合曲線のパラメータの進行方向を反転させる 関数を追加しました。
Bスプライン曲線の形状を変えずに、端点のノットを多重にする 関数を追加しました。
ある点が曲線/曲面上にあるかどうかを調べる 関数について、 すべての曲線/曲面に対応しました。
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次元の演算の不整合には手をつけていません。 この件については、引き続いて調査/検討を進めますが、 ユーザの皆さんからの御意見も頂けると幸いです。
曲線境界曲面と他の曲面との交線を求める際に、 交線の全体あるいは一部が曲線境界曲面の境界に一致していると 正しい結果が得られない場合がありました。 GHL 3.3 では、この現象を改善しました。
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 ある点がトリム曲線のどちら側にあるかを判定する
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スプライン曲線)
サポートに関する御連絡は、以下の宛先へお送り下さい。
株式会社 精密形状処理研究所 FAX:03-5276-6478
柿下 尚武 naokak@pml.co.jp 長谷川 亨 hasegawa@sra.co.jp
鹿野 信幸 shikano@pml.co.jp 徐 子韜 zitao@pml.co.jp 伊藤 英明 hideit@pml.co.jp