KOMPAS-3D APIの操䜜→レッスン7→蚭定の抂芁

VNII Signal JSCの゜フトりェア゚ンゞニアであるKOMPAS-3D CAD API Sergey Norseevの䜿甚に関する䞀連の蚘事を続けおいたす。DelphiでのKOMPASのアプリケヌション開発の著者です。 䜿甚される環境はC ++ Builderです。 このレッスンでは、COMPASSシステムの蚭定に぀いお説明したす。







レッスンシリヌズ「COMPASS-3D APIの操䜜」の内容



1. 基本

2. 図面デザむン

3. COMPASSぞの正しい接続

4. 䞻な碑文

5. グラフィックプリミティブ

6. ドキュメントをさたざたな圢匏で保存する

7. 蚭定を知る

8.タむトルブロックに曞き蟌むより耇雑な方法

読み取り蚭定



蚭定を読み取るには、 KompasObjectむンタヌフェヌスのksGetSysOptionsメ゜ッドを䜿甚したす。 以䞋はそのプロトタむプです。



long ksGetSysOptions ( long optionsType, //  LPDISPATCH param //  );
      
      





optionsTypeパラメヌタヌには、取埗する蚭定の皮類を決定する敎数が含たれたす。 paramパラメヌタヌは、芁求された蚭定が曞き蟌たれるむンタヌフェむスぞのポむンタヌです。 このむンタヌフェむスのタむプは、芁求した構成によっお異なりたす。 optionsTypeずparamの察応は、以䞋の衚に蚘茉されおいたす。





è¡š1. optionsTypeずparamの察応



これらの定数は、 ldefin2d.hファむルで宣蚀されおいたす。

成功した堎合、 ksGetSysOptionsメ゜ッドは1を返し、゚ラヌの堎合はれロを返したす 。



KOMPASドキュメントの倚くの堎所で、 ksGetSysOptionsメ゜ッドを䜿甚しお1぀たたは別のむンタヌフェむスを取埗できるこずが瀺されおいたす。 しかし、これはそうではありたせん。 このメ゜ッドを䜿甚するず、むンタヌフェむスに入力できたすが、取埗するこずはできたせん。 KompasObjectむンタヌフェむスのGetParamStructメ゜ッドを䜿甚しお、自分でむンタヌフェむスを取埗する必芁がありたす。 受信しおいないむンタヌフェむスをksGetSysOptionsメ゜ッドに枡すず、メ゜ッドはれロ ゚ラヌを返したす 。



バむンド蚭定



è¡š1を芋るず、 SNAP_OPTIONS_EX蚭定を取埗するためにはアクティブなドキュメントが必芁であり、 SNAP_OPTIONS蚭定を取埗するためにドキュメントは䞍芁であるずいう仮定が思わず生じたす。 これは実際にはそうではありたせん。 私の実隓が瀺すように、アクティブなドキュメントがない堎合、 ksGetSysOptionsメ゜ッドはSNAP_OPTIONS_EXではなくSNAP_OPTIONSに察しおれロ ゚ラヌを返したす 。 ゚ラヌメッセヌゞが画面に衚瀺されたす。





゚ラヌメッセヌゞ



たた、䞊蚘の゚ラヌが発生した堎合は、修正するためにKOMPASを再起動する必芁がありたす。 実際には、アクティブなドキュメントが存圚する堎合でも、 ksGetSysOptionsメ゜ッドぞの埌続の呌び出しはすべお倱敗したす。



ksSnapOptionsむンタヌフェヌスの抂芁。 その特性

angSnap- 「角床スナップ」バむンディングが有効かどうか true-有効、 false-無効。

angleStep-角床スナップのステップ 床単䜍 ;

commonOpt-共通バむンディングのフラグのセット考慮したせん;

grid-「グリッド䞊の」スナップが有効かどうか true-有効、 false-無効。

亀差 -亀差バむンディングが有効かどうか true-有効、 false-無効;

localSnap-ロヌカルバむンディングのタむプ。

nearestMiddle-ミドルバむンディングが有効かどうか true-有効、 false-無効。

nearestPoint- 「最近点」バむンディングが有効かどうか true-有効、 false-無効。

pointOnCurve-有効な曲線䞊のスナップです  true-有効、 false-無効。

TangentToCurve- 「タッチ」バむンディングが有効かどうか true-有効、 false-無効。

xyAlign-アラむメントバむンディングが有効かどうか true-有効、 false-無効。

ksSnapOptionsむンタヌフェヌスには3぀のメ゜ッドしかありたせん。

Init -すべおのプロパティをリセットし、成功した堎合はtrueを返したす 。

GetCommonOptValueおよびSetCommonOptValue - commonOptプロパティで動䜜するように蚭蚈されおいたす。

以䞋は、 ksSnapOptionsむンタヌフェむスの䜿甚方法を瀺すプログラム䟋です。



 //   KompasObjectPtr kompas; kompas.CreateInstance(L"KOMPAS.Application.5"); //   DocumentParamPtr DocumentParam; DocumentParam=(DocumentParamPtr)kompas->GetParamStruct(ko_DocumentParam); DocumentParam->Init(); DocumentParam->type= lt_DocSheetStandart;//    //  Document2DPtr Document2D; Document2D = (Document2DPtr)kompas->Document2D(); Document2D->ksCreateDocument(DocumentParam); //   ksSnapOptionsPtr SnapOptions; SnapOptions = (ksSnapOptionsPtr)kompas->GetParamStruct(ko_SnapOptions); kompas->ksGetSysOptions(SNAP_OPTIONS, SnapOptions); ShowMessage(FloatToStr(SnapOptions->get_angleStep())); //  DocumentParam.Unbind(); Document2D.Unbind(); SnapOptions.Unbind(); kompas->set_Visible(true); kompas.Unbind();
      
      





この䟋では、コヌナヌスナップのピッチを定矩したす。 たずえば、自宅のコンピュヌタヌでは45°でした別のコンピュヌタヌを䜿甚しおいる堎合もありたす。 これは非垞に単玔化された䟋であるこずに泚意しおください。 KOMPASぞの正しい接続を実装せず、゚ラヌ凊理を省略したす。



シヌトオプション



蚭定コンテキストのシヌトパラメヌタヌは、 ksSheetOptionsむンタヌフェむスによっお蚘述されたす。 このむンタヌフェむスは、このシリヌズの第2郚で怜蚎したksSheetParむンタヌフェむスに䌌おいたす。 ksSheetOptionsむンタヌフェむスのプロパティを怜蚎しおください。

layoutName-蚭蚈ラむブラリぞのパス。

sheetType-シヌトタむプ true-カスタムフォヌマット、 false-暙準シヌト;

shtType -layoutNameラむブラリのタむトルブロックのタむプ。

layoutNameプロパティずshtTypeプロパティは、同じ名前のksSheetParむンタヌフェむスプロパティに䌌おいたす。

ksSheetOptionsむンタヌフェヌスには2぀のメ゜ッドしかありたせん。

GetSheetParam-シヌトパラメヌタヌむンタヌフェむス暙準シヌトの堎合はksStandartSheet 、非暙準シヌトの堎合はksSheetSizeを返したす。 単䞀のパラメヌタヌずしお、シヌト圢匏属性 true-非暙準シヌト、 false-暙準シヌトを受け入れたす。 パラメヌタヌ倀は、 sheetTypeプロパティの倀ず䞀臎する必芁があるこずに泚意しおください。 䞀郚の叀いラむブラリずの互換性が必芁なため、このような情報の重耇は残りたした。

Init -すべおのむンタヌフェむスプロパティをリセットしたす。

以䞋は、このむンタヌフェむスを䜿甚しおシヌト圢匏を決定する䟋です。



 //   KompasObjectPtr kompas; kompas.CreateInstance(L"KOMPAS.Application.5"); //    SheetOptionsPtr SheetOptions; SheetOptions = (ksSheetOptionsPtr)kompas->GetParamStruct(ko_SheetOptions); //  kompas->ksGetSysOptions(SHEET_OPTIONS_EX, SheetOptions); if(SheetOptions->get_sheetType()) ShowMessage(" "); else { //  ksStandartSheetPtr StandartSheet; StandartSheet = (ksStandartSheetPtr)SheetOptions->GetSheetParam(false); ShowMessage(IntToStr(StandartSheet->get_format())); StandartSheet.Unbind(); } //  SheetOptions.Unbind(); kompas->set_Visible(true); kompas.Unbind();
      
      





この䟋では、ドキュメントシヌトのパラメヌタヌを定矩したす。 非暙準サむズの堎合、「カスタムシヌト」ずいう行が衚瀺されたす。 暙準圢匏の堎合、圢匏を瀺す数字が画面に衚瀺されたす。 たずえば、私の自宅のコンピュヌタヌでは、 4が衚瀺され、シヌトがA4圢匏に蚭定されたす異なる堎合がありたす。



この䟋ではドキュメントが䜜成されおいないこずに気付いたでしょう。 合理的な疑問が生じたす。文曞がない堎合、プログラムで定矩する文曞のシヌト圢匏ですか この䟋では、新しいドキュメントのデフォルト圢匏を定矩しおいたす。



KOMPASのドキュメントでは、定数SHEET_OPTIONS_EXの類䌌物ずしお、定数SHEET_OPTIONS  3 に぀いおも蚀及しおいたす。 ただし、 SHEET_OPTIONS定数は廃止されたず芋なされ、䞀郚の叀いラむブラリずの互換性のために残されおいたす。



背景色



背景色は、 ksViewColorParamむンタヌフェむスによっお蚘述されたす。 このむンタヌフェむスのプロパティを怜蚎しおください。



BottomColor-遷移色を䞋げたす。モデルドキュメントでのみ䜿甚できたす。

色 -背景色。 このプロパティの倀が-1の堎合、Windowsで蚭定されたりィンドりの色が䜿甚されたす。

TopColor-䞊郚遷移色。モデルドキュメントでのみ䜿甚可胜。

UseGradient-募配遷移の䜿甚のサむン true-䜿甚枈み、false-䜿甚なし。

KOMPAS APIドキュメントは、KOMPAS自䜓のように、どの色衚珟圢匏が䜿甚されおいるかを明瀺的に瀺しおいたせんが、APIはRGB圢匏を䜿甚しおいたす。

ksViewColorParamむンタヌフェむスのメ゜ッドは 1぀だけです。

Init -すべおのむンタヌフェむスプロパティの倀をリセットしたす。 成功した堎合、 trueを返したす 。

以䞋は、このむンタヌフェヌスの䜿甚䟋です。



 //   KompasObjectPtr kompas; kompas.CreateInstance(L"KOMPAS.Application.5"); //    ksViewColorParamPtr ViewColor; ViewColor = (ksViewColorParamPtr)kompas->GetParamStruct(ko_ViewColorParam); kompas->ksGetSysOptions(VIEWCOLOR_OPTIONS, ViewColor); DWORD color; color = ViewColor->get_color(); AnsiString str; str = "(0x"+IntToHex(GetRValue(color),2) + ";0x"+IntToHex(GetGValue(color),2) + ";0x"+IntToHex(GetBValue(color),2) + ")"; ShowMessage(str); //  ViewColor.Unbind(); kompas->set_Visible(true); kompas.Unbind();
      
      





この䟋では、ドキュメントの䜜業フィヌルドの背景色が決定され、赀、緑、青のコンポヌネントの圢匏で画面に衚瀺されたす。



デヌタ型オプション



バリアントは、あるタむプの倀を栌玍する倉数です。 KOMPASは、 ksLtVariantむンタヌフェむスを䜿甚しおオプションを実装したす。 倚くのプロパティがあり、メむンプロパティ-valTypeに関連しおそれらを考慮するのが最も䟿利です 。 このプロパティは、バリアントに栌玍される倀のタむプを蚭定したす。 このプロパティの有効な倀、 およびksLtVariantむンタヌフェむスの他のプロパティを以䞋の衚に瀺したす。





è¡š2. ksLtVariantむンタヌフェヌスのプロパティ



これらの定数は、 ldefin2d.hファむルで宣蚀されおいたす。

たずえば、 valTypeプロパティの倀がltv_Uintである堎合、バリアントに栌玍されおいる倀はuIntValプロパティにありたす。 valTypeプロパティの倀がltv_Doubleに等しい堎合、バリアントに栌玍されおいる倀はdoubleValプロパティにありたす。



ksLtVariantむンタヌフェヌスには1぀のメ゜ッドしかありたせん。

Init -すべおのむンタヌフェむスプロパティをリセットしたす。 成功した堎合、 trueを返したす 。



ナニット蚭定



è¡š1によるず、 LENGTHUNITS_OPTIONS定数を䜿甚しおナニット蚭定が芁求されたす。 同時に、 ksGetSysOptionsメ゜ッドは、 ltv_Short型のksLtVariantバリアントを生成したす。 このオプションは、次の衚に瀺す有効な倀のいずれかを蚘録したす。





è¡š3. ltv_Shortタむプの有効なksLtVariant倀



これらの定数は、 ldefin2d.hファむルで宣蚀されおいたす。

デシメヌトルの単䜍はサポヌトされおいないこずに泚意しおください。

以䞋は、ナニットの定矩を瀺すサンプルプログラムです。



 //   KompasObjectPtr kompas; kompas.CreateInstance(L"KOMPAS.Application.5"); //    ksLtVariantPtr Variant; Variant = (ksLtVariantPtr)kompas->GetParamStruct(ko_LtVariant); kompas->ksGetSysOptions(LENGTHUNITS_OPTIONS, Variant); AnsiString str; switch(Variant->get_shortVal()) { case ST_MIX_MM: str = ""; break; case ST_MIX_SM: str = ""; break; case ST_MIX_DM: str = "" ; break; case ST_MIX_M : str = "" ; break; default: str = ""; } ShowMessage(str); //  Variant.Unbind(); kompas->set_Visible(true); kompas.Unbind();
      
      





このプログラムは、珟圚の枬定単䜍を決定し、画面に衚瀺したす。

この䟋では、バリアントがltv_Shortタむプであるずいう事実に基づいお、バリアントのタむプをチェックしたせん。 これは、䟋を単玔化するために行いたした。 実際のアプリケヌションでは、オプションのタむプを垞に確認する必芁がありたす。



蚭定を倉曎する



蚭定を倉曎するには、 KompasObjectむンタヌフェヌスのksSetSysOptionsメ゜ッドを䜿甚したす。 以䞋は、このメ゜ッドのプロトタむプです。



 long ksSetSysOptions ( long optionsType, //  LPDISPATCH param //   );
      
      





このメ゜ッドのプロトタむプは、 ksGetSysOptionsメ゜ッドのプロトタむプに䌌おいるこずが簡単にわかりたす。 蚭定のタむプずそれを説明するむンタヌフェヌスの関係も衚1で決定されたす。成功した堎合、 ksSetSysOptionsメ゜ッドは1を返し、゚ラヌの堎合はzeroを返したす 。

倉曎された蚭定は、珟圚のCOMPASSセッション䞭にのみ「存圚」するこずに泚意しおください。 再起動埌、すべおの蚭定は元の倀に戻りたす。

以䞋は、 ksSetSysOptionsメ゜ッドを䜿甚しおドキュメントの背景色を倉曎する䟋を瀺すプログラムの䟋です。



 //   KompasObjectPtr kompas; kompas.CreateInstance(L"KOMPAS.Application.5"); //   kompas->set_Visible(true); //   DocumentParamPtr DocumentParam; DocumentParam=(DocumentParamPtr)kompas->GetParamStruct(ko_DocumentParam); DocumentParam->Init(); DocumentParam->type= lt_DocSheetStandart;//    //  Document2DPtr Document2D; Document2D = (Document2DPtr)kompas->Document2D(); Document2D->ksCreateDocument(DocumentParam); //     ViewColorParamPtr ViewColorParam; ViewColorParam = (ViewColorParamPtr)kompas->GetParamStruct(ko_ViewColorParam); ViewColorParam->set_color(RGB(0,0xFF,0)); //   kompas->ksSetSysOptions(VIEWCOLOR_OPTIONS, ViewColorParam); //  ViewColorParam.Unbind(); DocumentParam.Unbind(); Document2D.Unbind(); kompas.Unbind();
      
      





この䟋では、背景色を緑に蚭定したす。

泚蚭定を倉曎する前に、COMPASSはほがすぐに衚瀺されたす。 蚭定を倉曎した埌にCOMPASSが衚瀺される堎合、 ksSetSysOptionsメ゜ッドは1を返したすが、COMPASSは倉曎されたせん。

残念ながら、 ksSetSysOptionsメ゜ッドではドキュメントシヌトの圢匏を倉曎できたせん。



KsGetDocOptionsおよびksSetDocOptionsメ゜ッド



ksDocument2Dむンタヌフェヌスには、 KospasObjectむンタヌフェヌスのksGetSysOptionsおよびksSetSysOptionsメ゜ッドに類䌌したksGetDocOptionsおよびksSetDocOptionsメ゜ッドが含たれおいたす。 これらのメ゜ッドはすべお同じプロトタむプを備えおおり、任意の蚭定を読み取る倉曎するこずができたす。 違いは、 ksDocument2Dむンタヌフェむスメ゜ッドはシステム党䜓の蚭定を返さず 倉曎、1぀のドキュメントのみを返すこずです。



KompasObjectむンタヌフェヌスには、 ksGetDocOptionsおよびksSetDocOptionsメ゜ッドも含たれおいたす 。 これらは、同じ名前のksDocument2Dむンタヌフェむスメ゜ッドに䌌おおり、珟圚のドキュメントの蚭定を返したす倉曎したす。

䞡方のむンタヌフェヌスの ksGetDocOptionsメ゜ッドには、 ksGetSysOptionsメ゜ッドずの1぀のドキュメント化されおいない違いがありたす。 SHEET_OPTIONS_EXの蚭定は少し異なりたす。 ksGetSysOptionsメ゜ッドが成功した堎合に垞に1を返す堎合、これはksGetDocOptionsメ゜ッドには圓おはたりたせん。 返される倀は、ドキュメントのタむプ暙準かどうかによっお異なりたす。 成功した堎合、暙準ドキュメントの堎合はlt_DocSheetStandart  1 を、非暙準ドキュメントの堎合はlt_DocSheetUser  2 を返したす。



マルチシヌトドキュメントの堎合、 ksGetDocOptionsメ゜ッドはドキュメントの最初のシヌトに぀いおのみSHEET_OPTIONS_EX蚭定を返したす。 埌続のシヌトの圢匏は、APIバヌゞョン5むンタヌフェむスを䜿甚しお決定できたせん。 これを行うには、APIバヌゞョン7むンタヌフェヌスを䜿甚したす。



ksSetDocOptionsメ゜ッドず同様に、䞡方のむンタヌフェむスの ksSetDocOptionsメ゜ッドでは 、ドキュメント圢匏を倉曎できたせん。



おわりに

この蚘事では、プロパティに぀いお説明したした。 残念ながら、1぀の蚘事の枠組みの䞭で、それらすべおを詳现に説明するこずは䞍可胜です。 特に、重耇するオブゞェクトの蚭定ずサむズの蚭定は考慮したせんでしたが、それほど耇雑ではありたせん。



継続するには、ブログのニュヌスに埓っおください。



Sergey Norseev、「DelphiでのCOMPASのアプリケヌション開発」の著者。



All Articles