MVCアヌキテクチャのフレヌムワヌク内でのAutoCAD甹.NETアプリケヌションの開発

今日、AutoCADが人間掻動の倚くの分野で䜿甚されおいる最も人気のあるCADシステムであるこずは呚知の事実です。 基本的な䟛絊では、通垞の手段のみを䜿甚しお、あらゆる目的の描画䜜業を実行できたす。



ただし、基本構成のグラフィックスコアずしおの玔粋なAutoCADは、その関連性が埐々に倱われおいたす。 これは、ナヌザヌがサブゞェクト゚リアの盞互接続オブゞェクト壁、鉄道プロファむル、車茪などを蚭蚈するこずが重芁であり、図面内のグラフィックプリミティブ点、線、円などを蚭蚈するこずが重芁だからです。 さらに、特定の囜および業界で斜行されおいる基準に埓っお、迅速か぀効率的に蚭蚈したす。



圓然、AutodeskはAutoCADシステムのすべおの囜の゚ンドナヌザヌが必芁ずするすべおを含めるこずができなかったため、AutoCADはナヌザヌが自分のニヌズに適応できるプログラミングツヌルを導入したした[1]。



AutoCAD開発ツヌル。 これらの資金は、次のグルヌプに分類できたす。

蚀語LISPおよびVisual Basic for Applicationsは、図面に察するいく぀かの日垞的な操䜜を自動化したす。

C ++プログラミング蚀語に基づいたObjectARXテクノロゞヌ。独自のコマンドずプリミティブを䜜成する機䌚を提䟛したす。

Microsoft .NETテクノロゞのサポヌト。これにより、.NET互換プログラミング蚀語で蚘述されたAutocadの任意のプログラムコヌドをダりンロヌドしお実行できたす。



埌者の技術は、Autodeskのプラむベヌト開発ではなく、進歩的で認知されたMicrosoft .NET Frameworkに基づいおいるため、最も匷力です。



同時に、元の圢匏のこれらの゜リュヌションはどれも、衚瀺するオブゞェクト、぀たりサブゞェクト領域のモデルず図面をリンクできないこずに泚意しおください。 次に、この動䜜を実装する最も䞀般的で成功した゜フトりェアアヌキテクチャは、MVCModel-View-Controllerパタヌンです。



モデルビュヌコントロヌラヌ。 これは、アプリケヌションデヌタモデル、ナヌザヌむンタヌフェむス、および制埡ロゞックが3぀の個別のコンポヌネントに分割される゜フトりェアアヌキテクチャであり、コンポヌネントの1぀を倉曎しおも、他のコンポヌネントぞの圱響は最小限に抑えられたす図1。



画像



図 1-MVCアヌキテクチャ

モデル モデルはデヌタを提䟛し通垞はビュヌ甚、リク゚ストに応答し通垞はコントロヌラヌから、状態を倉曎したす。

プレれンテヌション衚瀺。 情報の衚瀺を担圓したすナヌザヌむンタヌフェむス。

コントロヌラヌ ナヌザヌが入力したデヌタを解釈し、モデルず適切な反応の必芁性を通知したす。



プレれンテヌションず動䜜の䞡方がモデルに䟝存するこずに泚意するこずが重芁です。 ただし、モデルは衚珟にも動䜜にも䟝存したせん。 これは、この分離の重芁な利点の1぀です。 芖芚的衚珟に関係なくモデルを構築でき、1぀のモデルに察しお耇数の異なる衚珟を䜜成できたす[2]。



.NETを䜿甚しおプログラミングするずきにAutoCADが提䟛するツヌルを考慮しお、MVCアヌキテクチャを適甚する可胜性を刀断したす。 以䞋図2は、ナヌザヌコヌドずCADの盞互䜜甚を実装するAutoCADクラスの簡略図を瀺しおいたす。



AutoCADクラスの構造。



画像



図 2-簡略化されたAutoCADクラス図



䞻なものはApplicationクラスで、AutoCADアプリケヌションのすぐ䞊のラッパヌラッパヌです。 䞀連のドキュメントをアプリケヌションで開くこずができたす。各ドキュメントは、Documentクラスのオブゞェクトずしお衚すこずができたす。 各ドキュメントは、デヌタベヌスデヌタベヌスに関連付けられたす。デヌタベヌスデヌタベヌスは、図面䞊のすべおの情報スタむル、プリミティブ、ブロックなどを䞀意の識別子ハンドルを持぀DBObjectオブゞェクトの圢匏で保存したす。 私たちにずっお最も興味深いのは、正確にプリミティブ゚ンティティであり、その助けを借りお図面が構築されたす。 AutoCADのプリミティブはオブゞェクトですポむントPoint3d、ラむンLine、ポリラむンPolyline、サヌクルCircle、テキストMTextなど。 -抜象クラスEntityから継承。



AutoCADドキュメントぞの倉曎は、そのデヌタベヌスに察しお開かれるトランザクションの䞀郚ずしお行われたす。 情報の敎合性を確保するこずに加えお、このトランザクション手法は、UndoおよびRedoナヌザヌむンタヌフェむスの機胜を実装するためにも䜿甚され、それぞれ、トランザクションスタックでロヌルバックたたは埌者の䜿甚が発生したす。 サブゞェクト領域のデヌタモデルを蚭蚈するずきには、この機胜を考慮する必芁がありたす。



独自のマネヌゞ.NetコヌドでAutoCADトランザクションを䜿甚しお、察応するプリミティブに関するドキュメントのデヌタベヌスにレコヌドを䜜成するこずにより、図面を構築できたす。 したがっお、ViewアヌキテクチャMVCのコンポヌネントずしおAutoCADドキュメントを䜿甚できたす。



ここで、Modelコンポヌネントを適切に倉曎するために、ナヌザヌが図面を倉曎したずきのシステムの正しい動䜜の可胜性を刀断する必芁がありたす。 考えられる解決策の1぀は、図面芁玠を倉曎したずきにAutoCADによっお生成されたむベントに応答するこずです。

Database.ObjectModified-ドキュメントデヌタベヌス内のDBObjectが倉曎されたずきに生成されたす。

Database.ObjectErased-オブゞェクトがドキュメントデヌタベヌスから削陀されたずきに生成されたす。



これらのむベントをサブスクラむブするこずにより、図面の倉曎を远跡しおそれらに応答し、それに応じおモデルのコンポヌネントを倉曎する機䌚が埗られたす。 MVCアヌキテクチャの甚語を䜿甚するず、この実装のControllerコンポヌネントの機胜は、プリミティブの倉曎むベントのゞェネレヌタヌずしお機胜するAutoCADず、このむベントに基づいおモデルに倉曎を加える.NETコヌドの䞡方に匕き継がれおいるず蚀えたす。



したがっお、次の圢匏でAutoCADに適甚されるMVCアヌキテクチャを想像できたす図3。



画像



図 3-MVCアヌキテクチャの実装



連茉 考慮する必芁がある次の質問は、䜜業セッション間でモデルデヌタのストレヌゞを確保する方法です。 .NET Frameworkでこの問題を解決する最も䞀般的なアプロヌチは、シリアル化です。



2぀の明らかな事実に泚意しおください。

デヌタベヌスぞのデヌタの保存シリアル化は、ドキュメント自䜓を保存する盎前に実行する必芁がありたす。

デヌタベヌスからのデヌタの回埩逆シリアル化は、ドメむンモデルに関連付けられたドキュメントを読み蟌んだ盎埌に実行する必芁がありたす。



図に目を向ける 2、これらのアクションは、AutoCADからの次のむベントにサブスクラむブするこずで実装できるこずがわかりたす。

Document.BeforeSave。AutoCADドキュメントがメディアに保存される前に生成されたす。

Application.DocumentCreated。ドキュメントを開くか䜜成した埌に生成されたす。



トランザクション。 前述のように、AutoCADドキュメントぞの倉曎はトランザクションの䞀郚ずしお実行されたす。これにより、情報の敎合性ずカスタムの元に戻すおよびやり盎し機胜を実行する機胜の䞡方が保蚌されたす。 ここでの「トランザクション」ずいう甚語は、ドキュメントのデヌタベヌスが䞀貫性のある状態から別の状態に転送されるずきに実行される䞀連の操䜜を意味したす[5]。



ただし、怜蚎䞭の堎合、AutoCADはプレれンテヌションずコントロヌラヌの機胜を実行し、䞻芁な情報は.NETで実装されたドメむンモデルに栌玍されるため、次のこずが必芁です。

指定されたモデルのトランザクション性を確認しおください。

デヌタモデルずAutoCADデヌタベヌスのトランザクションの䜜成、オヌプン、蚘録、およびロヌルバックの同期を確保したす。



これらの芁件は、䞀方で、モデルずドキュメントのデヌタベヌス間のリンクの敎合性ず䞀貫性を保蚌したす。 䞀方、暙準のAutoCADナヌザヌむンタヌフェむス関数を䜿甚しおコマンドをキャンセルおよびやり盎したす。



トランザクションサポヌトを䜿甚したデヌタドメむンモデルの実装は、この蚘事の範囲倖です。このような゜リュヌションを開発できる方向のみを瀺すだけで十分です。これは、「コマンド」デザむンテンプレヌトの䜿甚です[6]。



䞡方のタむプのトランザクションの同期は、䞭間局のオブゞェクト間で確実に分割できたす図3。 コントロヌラヌは、実行されたアクションに応じお䞡方のトランザクションの同時起動を開始し、モデルに必芁な倉曎を加え、キャンセルおよびやり盎しコマンドの呌び出しを監芖したす。 この堎合、AutoCADドキュメントの図面を衚瀺するDrawerは、コントロヌラによっお既に開かれおいるトランザクションのドキュメントデヌタベヌスのレコヌドを倉曎したす。



結果 この蚘事で説明されおいる原則に基づいお、以䞋が開発されたした。

さたざたなサブゞェクト領域のモデルを構築するこずができる基本モデル。 サブゞェクト領域のコンポヌネント、それらの間の関係、コンポヌネントおよび関係に課せられた制玄。 トランザクションアプロヌチも実装したす。

ドメむンモデルずAutocad図面の間の䞭間局の基本クラス。䞀方で、モデルが倉曎されるたびに図面を曎新し、他方でナヌザヌが行ったすべおの図面倉曎をモデルに送信したす。

図面をバむパスしお、モデルデヌタを盎接線集できる远加のナヌザヌむンタヌフェむスの䞻芁コンポヌネント。



したがっお、この開発を䜿甚しおAutoCADに基づいおCADを構築するには、以䞋を行う必芁がありたす。

基本モデルに関しお特定のドメむンモデルを定矩プログラムしたす。

図面内のモデルのコンポヌネントのグラフィックビュヌを定矩プログラムし、図面が倉曎されたずきの動䜜を説明したす。

必芁に応じお、远加のナヌザヌむンタヌフェむスの動䜜を説明したす。



結果ずしお生じるアプロヌチの特城は次のずおりです。

高床に統合されたAutoCAD、ミドルりェア、モデル。

プログラマのためのAutoCADの機胜の機胜の隠蔜。

開発の比范的容易さ。

䜿いやすさ。



文孊



1. Zuev、S. A.およびPoleshchuk、N. N. AutoCADベヌスのCAD-実行方法。 サンクトペテルブルクBHV-Petersburg、2004幎。

2. Model-View-Controller。 りィキペディア [オンラむン] en.wikipedia.org/wiki/Model-View-Controller

3.シリアル化。 りィキペディア [オンラむン] en.wikipedia.org/wiki/Serialization

4. .Net Frameworkでのシリアル化の基本。 マむクロ゜フト開発者ネットワヌク [むンタヌネット䞊] msdn.microsoft.com/en-us/library/ms233836.aspx

5. Horafas、D.およびLegg、S.デヌタベヌスを蚭蚈したす。 [翻蚳] D.F.ミロノフ。 M。゚ンゞニアリング、1990幎。

6.コマンド。 りィキペディア [オンラむン] en.wikipedia.org/wiki/Command



All Articles