CADの原子力技術

画像

この蚘事では、特殊なCADシステムの開発者の芳点から幟䜕孊モデリングラむブラリの抂芁を簡単に説明し、C3Dコアの統合に関する私の経隓を共有したす。



「倧芏暡な」デザむンプログラムの垂堎は、AutoCAD、SolidWorks、NX、Creo Elements、CATIAなどの䞻芁なプレヌダヌに長い間分割されおきたしたが、窓や階段、キャビネット、垃匵りの家具、パむプラむン、゚ンクロヌゞャヌは非垞に広くダむナミックです。 私の意芋では、これには2぀の理由がありたす。第䞀に、倧芏暡なCADシステムを賌入するコストが高いこずず、その䞭で効果的に䜜業する方法を知っおいる埓業員です。 そしお、第二に、倧芏暡なCADシステムの特定の補品の蚭蚈に適応できないため、それらの補品の専門補品の蚭蚈速床が遅いずいう事実に぀ながりたす。



特殊なCADシステムがこれらの問題に察する答えであり、プログラマヌはそれらを䜜成する2぀の方法に盎面しおいたす。 1぀目は、提䟛されおいるAPI、プラグむン、あらゆる皮類のスクリプトを䜿甚した倧芏暡なCADの改良です。 このアプロヌチは垞に正圓ずは限りたせん。 その結果、ナヌザヌのCADのコストが増加し倧芏暡なCADず適応の䞡方に費甚を支払う必芁がありたす、そのようなコンバむンで䜜業するために必芁な゚ンゞニアの資栌およびその結果、トレヌニングずメンテナンスのコストが非垞に高くなりたす。 2番目の方法は、れロからシステムを䜜成するこずです。 このパスは間違いなくはるかに難しいです。なぜなら、 膚倧な機胜を最初から開発する必芁がありたす。 しかし、それにもかかわらず、補品の成功を決定する゚ンドナヌザヌにずっおは、はるかに安䟡で䟿利な堎合がありたす。



ニッチなCADシステムの䜜成は、間違いなく非垞に高䟡な開発であり、3次元モデルの幟䜕孊的モデリングのアルゎリズムは非垞に耇雑です。 この問題の解決に圹立぀ラむブラリに぀いおは、さらに説明したす。 しかし、レビュヌを開始する前に、幟䜕孊的なコアから取埗したい機胜を決定したす。 CADは家具蚭蚈甚に蚭蚈されおいるため、次の芁件が圢成されおいたすカットアりト付きの任意圢状の平板、䞀定断面のプロファむル、回転䜓、いわゆる曲げパネル、およびこれらのボディの構造ゞオメトリ操䜜、䜜成された投圱ボディに基づく構造、セクション。



CADの適甚された芳点から、すべおの幟䜕孊的モデリング゜リュヌションは、ポリゎン、ボクセル、および境界の衚珟を䜿甚しお、3぀のグルヌプに分けるこずができたす。 オブゞェクトの倚角圢モデリングずは、䞀連の倚角圢通垞は䞉角圢の圢でオブゞェクトを生成するこずで、OpenGLやDirectXなどのグラフィカルAPIを䜿甚しお芖芚化したす。 この方法が最も簡単に実装できたす。 ポリゎンボディの䜜成ずそれらを䜿甚した建蚭的な操䜜は、独立しお䜜成するか、CGALなどのオヌプンラむブラリを䜿甚できたす。 私たちは長幎このような自己蚘述の実装を䜿甚し、それは完党に報われたした安くお陜気な。 したがっお、かなり長い間、私たちは特別な手間をかけずに、かなり耇雑な家具補品、たずえば湟曲したファサヌドをモデリングしたした。 ただし、ポリゎン衚珟には重倧な欠点があり、最終的に代替゜リュヌションの怜玢に぀ながりたした。 これらの欠点は次のずおりです。ポリゎンモデルでは、サヌフェス䞊のボディ円匧、円、スプラむンを囲む曲線に関する情報がないため、デザむナヌの䜜業が倧幅に耇雑になり、非平面サヌフェス円筒、円錐、球面、攟物面などから正確に構築するこずが困難になりたす建蚭的なCSG操䜜では、蚭蚈されたオブゞェクトの正確な図面の䜜成、正確な衚面積の蚈算、䜓の容積などが䞍可胜になりたす。 ボクセルモデリングも非垞に具䜓的であり、兞型的な蚭蚈䞊の問題を解決するこずを目的ずしおいたせん。



別の解決策は、 BREP境界衚珟を䜿甚しおオブゞェクトをモデル化するこずです。 BREPは、これらのボディの境界を䞀連の接続された面ずしお蚘述する3次元ボディの衚珟であり、各面は衚面の茪郭ですたずえば、平面、円筒、球、円錐、たたはNURBS。 画像 この方法には、ポリゎンモデルの欠点がありたせんが芖芚化たたは蚈算の䞭間段階ずしおポリゎンモデルを䜿甚したす、倧郚分のCADシステムで䜿甚されおいたす。 しかし、そのようなモデリングのための数孊的装眮は蚈り知れないほど耇雑であり、ラむブラリの遞択は非垞に限られおいたす。 それらのほずんどはC ++で曞かれおおり、他の蚀語で䜿甚するためのラッパヌを持っおいるものもありたす。



この分野のリヌダヌは、 ParasolidおよびACISコアです。 CADの倧郚分で䜿甚されおいたす。 それらに加えお、 CCADずGraniteが知られおいたす。これらは、倧芏暡なCADシステムCatiaずCreo Elementsのコンポヌネントで、最近ラむセンスが利甚可胜になりたした。 それらはすべお匷力な機胜を備えおおり、十分にテストされ最適化されおいたす。 兄匟にずっおの唯䞀の欠点は䟡栌です。 非垞に印象的な幎間支払いず、各販売からの倧きな割合の控陀により、それらに基づく小さなCADの䜜成は高䟡なむベントになりたす。



Solids ++ずSMLibはあたりよく知られおいない2぀の商甚ラむブラリであり、それらに基づくCADシステムに関する情報を芋぀けるこずができたせんでした。 Webサむトの説明によるず、どちらもゞオメトリックコアに兞型的な操䜜を実装しおいたす。 それらがどの皋床安定しお信頌できるかは未解決の問題です。 SMLibには非垞に倧きな利点がありたす。他のすべおの商甚ラむブラリずは異なり、SMLibは゜ヌスコヌドずずもに販売されおいたす。



圓時利甚できた囜内開発は、ASCON for Compassで開発されたC3Dコアのみでした。 遞択時には、垂堎に参入しただけで、䟡栌ず機胜のバランスの取れた比率に興味を持ちたした。 栞の遞択時に、 RGKは地平線にも登堎したした-野心的な囜内プロゞェクト、それに関する蚘事はすでにハブhttp://habrahabr.ru/post/180455/およびhttp://habrahabr.ru/post/180707/に登堎したしたが、䜕幎もの間、圌に関するデヌタは公匏りェブサむト䞊でも取埗できたせん。 そしお、公匏メヌルは手玙に返信したせん。



怜蚎䞭の最埌のコア-OpenCASCADE-唯䞀の無料゜リュヌション。 それに基づいお、有名なFreeCADパッケヌゞが䜜成されたした。 カヌネルは間違いなく機胜を開発しおおり、私の意芋では、かなり䟿利なAPIですが、残念ながら、かなり倚くの欠陥がありたす。テスト䞭に、䞀臎する顔を持぀ボディを枛算する操䜜で䞍正確なゞオメトリの圢で衚珟され、投圱ずパヌツのシル゚ットの生成で゚ラヌが発生したした。 ただし、これは開いおいるプロゞェクトであるこずを忘れないでください。可胜であれば、自分で゚ラヌを修正できたす。 このコアは商甚補品で無料で䜿甚できたすが、远加モゞュヌル http://www.opencascade.org/support/products および技術サポヌトが支払われるこずを忘れないでください 。



もちろん、それぞれのパッケヌゞで苊劎せずに䞊蚘のパッケヌゞを完党に比范するこずは䞍可胜ですが、それらの機胜に基づいお䜜られたCADシステムから機胜の倧たかなアむデアを埗るこずができたす。 財務胜力に基づいお、無料のOpenCASCADeたたは囜内のC3Dのいずれかを遞択したした。 安定性が高いため、C3Dを優先しお遞択したしたが、これは非垞に重芁でした。 ゚ンゞンで䜜成された膚倧な数のモデルを正しくむンポヌトする必芁がありたした。 たた、OpenCASCADEを䞀芋するず、バグを修正するのにどれだけ時間がかかるかを予枬するこずは困難です。 同様に重芁なのは、DXFのむンポヌト/゚クスポヌトの存圚ず、C3Dコアで投圱ずシル゚ットを生成するための安定したアルゎリズムです。 ただし、タスクの具䜓性が䜎い堎合は、おそらくOpenCASCADEがより有益な゜リュヌションになるでしょう。



その結果、ASCONからコアを導入するこずにしたした。これにはかなりの時間がかかりたした。この経隓を読者ず共有したいず思いたす。 C3Dコアは、BREPモデル、補助クラス、およびグロヌバル関数ずしお蚭蚈されたアルゎリズムのセットを蚘述するC ++クラスのセットを衚したす。 実装の最初の段階では、C ++カヌネルをプログラムに接続する方法を決定する必芁がありたした。これは、歎史的な理由から、Delphiで䜜成されおいたした。 必芁なすべおの機胜のCむンタヌフェむスを䜜成するのは、退屈で柔軟性に欠けるアプロヌチのように思えたした。 ゜リュヌションは非垞に迅速に芋぀かりたした-Delphiで盎接䜿甚できる玔粋な抜象クラスを䜿甚しお、C ++で䞭間「むンタヌフェむス」DLLを蚘述する それらには、VMTぞのポむンタが含たれおいたす。幞いなこずに、MSずEmbarcaderoのコンパむラはたったく同じ圢匏です。 その結果、OOPスタむルで必芁な機胜を提䟛し、DLLから1぀の関数のみを゚クスポヌトするDLLレむダヌを䜜成したした-メむンむンタヌフェむスを取埗したす。



次の段階は、初期デヌタに基づいたC3Dコア内のすべおの必芁なボディの構築、それらの䞉角枬量、および芖芚化のための䞉角枬量の取埗です。 この郚分に問題はありたせんでした。 ExtrusionSolid、EvolutionSolidの構築関数に基づいお、ボディが構築され、BooleanResult関数を䜿甚しお、枛算、加算、亀差によっお互いに結合されたす。 出力では、BREPデヌタを含むMbSolidボディMbFaceフェヌス、MbEdge゚ッゞなどを圢成したす。 倚かれ少なかれ耇雑なモデルのテストを開始するたで、すべおは玠晎らしいようでした-キャッシュなしで膚倧な数のオブゞェクトを構築するこずはそれほど速くないこずが刀明したした-自己蚘述アプロヌチず比范した速床は10回ごずに䜎䞋したした。 ここでは、C3DのTPに敬意を衚さなければなりたせん。圌らは、最も䞀般的なボディを「手動で」構築する機胜の曞き換えを支揎したした ボディの各面を個別に䜜成し、それらのすべおの゚ッゞを蚘述し、それらを互いに接続しお、出力で正しい閉じたボディを取埗するボディを構築し始めたした。



次のステップは芖芚化でした-C3Dから䞉角圢分割を遞択しお描画したす。 タスクは簡単に芋えたした既存のOpenGLレンダリングを考えるず、予期せぬキャッチがありたしたテクスチャを䜿甚したオブゞェクトの芖芚化は私たちにずっお非垞に重芁ですが、C3Dコアのテクスチャ座暙の明瀺的なサポヌトはありたせん明らかに、Compass 3Dにないため。 次のようにツむストしなければなりたせんでしたコアは、䞉角圢のいわゆるパラメトリック座暙を生成するこずを可胜にし、各面に察しお、テクスチャを倚かれ少なかれリアルにするこずができるスケヌリング係数を蚈算できたす。 ただし、この方法では、耇数の面に関連付けられたテクスチャ座暙を蚈算できたせん。 远加の「クランチ」を䜜成し、属性を䜿甚しお、面䞊のテクスチャの座暙を互いに接続する必芁がありたした。 さらに、モデルの芖芚化ず線集のために、さたざたなデヌタを転送する必芁がありたす。たた、属性を䜿甚しお保存するこずをお勧めしたす。属性は、ボディ、面、゚ッゞに割り圓おるこずができる配列名前ず倀です。



統合の最も困難な郚分は、湟曲したファサヌドのボディのモデリングでした。

画像

そのようなボディの構築は非垞に骚の折れる䜜業であるこずが刀明したした。 このタスクは、タスクのコアの3぀の最も重芁な欠点を明らかにしたした倉圢操䜜の欠劂、ルヌルドサヌフェスを含むボディの構造操䜜および粟床の問題は非垞に䞍安定であり、自己蚘述コアの粟床が䜎いためにモデルをサポヌトする必芁があり、公差の制埡ができないために悪化したしたC3Dコア。



統合の最終段階は、さたざたな゚クスポヌト/むンポヌト操䜜STEP、DXF、身䜓の盞察䜍眮の分析などでした。 幞いなこずに、開発者によっお倚かれ少なかれ迅速に解決された、カヌネルでかなりの数の゚ラヌが怜出されたデバッグに぀いお、別の蚀葉で蚀いたいず思いたす。 ここで、私たちが遭遇した䞻な問題を芁玄したいず思いたす。

1.倚くのレガシヌコヌド、2D / 3Dぞのすべおのタむプの分離、2Dでの䞍䟿で統䞀されおいない機胜、STLを繰り返す自己蚘述タむプおよび構造を備えた、䞍十分で䟿利な構造化API

2.すべおの構成芁玠に名前を付けるための文曞化されおいないメカニズムず、それらが䜿甚されおいなくおも送信する必芁性

3.すべおのデヌタを1e-6のオヌダヌの粟床にする必芁性、粟床管理の欠劂、および芳枬されない堎合に発生するさたざたな゚ラヌ

4.ボディのフラむス加工ず倉圢の経路を構築するための操䜜の欠劂



䞀般に、幟䜕孊的モデリングのカヌネルは非垞に耇雑な゜フトりェアであり、それらの統合におけるさたざたな皮類の問題は避けられたせん。 私たちの堎合、内郚゜リュヌションから本栌的なカヌネルぞの移行は、膚倧な時間を節玄し、蓄積された問題のレむダヌ党䜓を解決したした。埌悔しなければならないこずは、最初に既補のラむブラリを探すこずを気にしなかったこずです。 次の利点は、本栌的なゞオメトリコアぞの移行ずは区別できたす。

1.倧幅な時間の節玄独自の゜リュヌションの䜜成ず維持に費やした

2.䜜成されたゞオメトリの品質、曲面および境界の正しい構築を改善したした

3.䞍可芖の線を削陀しお高品質の図面を取埗する

4.「Saprovsky」3d圢匏STEP、SAT、XT、DXFぞの゚クスポヌト/むンポヌト



読者の1人が同様のラむブラリを䜿甚した経隓がある堎合は、その実装の経隓も共有するこずを願っおいたす。



All Articles