/********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ /*! @mainpage Maestro's Geometry Class Library * * * MGCLは B-Spline曲線、B-Spline曲面を含む曲線、曲面を取り扱うためのC++の * クラスライブラリです。NURBSを含む単体の曲線、曲面、トリムされた曲面、およびそれらを * Winged Edge Data Structure的な構造により結合したシェル構造までの表現能力を有しています。 * MGCLは、グラフィックな表示をするためには MFC(Microsoft Foundation Class) と OpenGL 4を * 利用しています。MFC配下のマンマシンインタフェースのアプリを作成することを前提としていますが、 * もし、これらの機能を利用しないのであれば、(すこしの手を加える必要がありますが) * これらを排除して単なるライブラリとしても利用可能です。 * * @section MGCL MGCLのクラス、関数は下記のようなモジュールに分類されています * (1) Base Class *   MGCLのベースとなるクラス群で、位置データ、ベクタ、行列演算、ボックス枠、 * B-Spline表現または交線を表現するための各種コンテナ、などが中心となります. * * (2) (Template) Functions or classe *   MGCLで利用している数値計算関数など有用な関数をまとめてあります. * * (3) Geometry(sub) classes *   点(MGPoint)、線(MGCurve)、面(MGSurface)の幾何表現のためのクラスで MGGeometry の * サブクラスになります. * * (4) Topology(sub) classes *   頂点(MGPVertex, MGBVertex)、エッジ(MGEdge)、ループ(MGLoop)、トリム曲面(MGFace)、 * シェル(MGShell)の位相構造表現のためのクラスで MGTopology のサブクラスになります. * * (5) GeoRelated classes *   Geometeryクラスの入出力パラメータに利用される各種クラス(MGCoons=Coons Patch, * MGPPRep=多項式表現のスプライン, 端末条件,など)が分類されます. * * (6) TopoRelated classes *   Topologyクラスの入出力パラメータに利用される各種クラス(MGFOuterCurve, MGLPoint)や、 * 曲面のトリム処理のユーティリティクラスの MGTrimLoop などのクラスが分類されます. * * (7) Object Related classes *   Geometry, Topologyに共通(MGFSurface)や、その分類に当てはまらないクラス(MGSTL)、 * MGObject のピックのための情報コンテナクラスが分類されます. * * (8) Gel Related classes *   MGGel はGroup Element(Gel)となりうるクラスの抽象クラスで、すべての MGObject 関連の最高位の * 抽象クラスとなります。Group ElementによりMGObjectはGroupの要素とすることができます。 * この分類には、MGObjectを除くMGGel直下のクラスおよびグループ内のGelの位置を表現する * MGGelPosition などのコンテナクラス、MGGel 配下のすべてのクラス分類のための * MGAbstractGel, MGAbstractGels などが分類されます. * * (9) File InputOutput classes *   MGGel 配下のクラスはまた、MGCLの用意するファイル入出力の対象でもあります。この入出力の * ためのクラスMGOfstream, MGIfstream, そしてIGESデータの入出力のクラス * (MGIgesFstream, MGIgesIfstream,MGIgesOstream)が分類されます. * * (10) Intersection Container classes *   点(MGPoint)、線(MGCurve)、面(MGSurface)の幾何表現同士、または MGEdge, MGLoop, MGFace, MGShell * などの Topology クラスとの交点とその配列を表現します. * * (11) UseTessellation classes *   面(MGSurface, MGFace)を表示するためにはそれらを細かな三角形で近似する必要があります。 * UseTessellationは曲面の三角形近似のためのツールクラスを提供します。 * この分類に含まれるクラスはそのためのクラスですが、通常直接利用する必要はなく、 * MGShell, MGFSurface(MGFaceとMGSurface)のshade(), triangulate()を利用します。 * * (12) Display Handling classes *   MGCLでは図形の表示にOpenGL4, イメージデータの実現のためにGDI-plus、マンマシンインタフェースに * MFC(Micrsoft Foundation Class)を利用しています。Display Handling ClassesにはMGCLの * オブジェクトの表示のためのクラスと表示のためのアトリビュートなどが分類されています. * */ // // MGCL.h #ifndef _MGCL_HH_ #define _MGCL_HH_ #include /** @file */ /** @defgroup BASE Base Class * @{ */ extern MG_DLL_DECLR const char* _MGCL_VER; extern MG_DLL_DECLR const char* _MGCL_FILE; // Maestro's Geometry Classes Library version 5.30 // <<<<<<<<<<4/20/2001>>>>>>>>>>>> // // たとえば4.10の場合は MGCL0410になる。 /// π 値の設定 const double mgPAI = 3.1415926535897932384626433833; /// @var mgHALFPAI /// @brief π/2 値の設定 const double mgHALFPAI = mgPAI/2.; /// 2.0 * π 値の設定 const double mgDBLPAI = mgPAI*2.; /// ///Infinite value Definition. This value is used in MGEReal class ///to identify infinite value of double. /// const double mgInfiniteVal = 1.e+20; ///Infinite type. enum MGINFINITE_TYPE { MGINFINITE_MINUS=-1, ///< Minus infinite MGINFINITE_FINITE=0, ///< Finite MGINFINITE_PLUS=1, ///< Plus infinite }; ///MGInterval type. enum MGINTERVAL_TYPE { MGINTERVAL_EMPTY, ///