/* ******************************************************************************** ** ** GetDrawingObj.c ** ** Copyright 2006 CTC ITOCHU Techno-Solutions Corporation All rights reserved. ** ******************************************************************************** */ /* ====================================================================== 注)図面(シート)が作成されていて図面(シート)上に製図オブジェクト (サンプルではライン)が作成されていることを前提とします。 ====================================================================== */ /* ============================================================ */ /* インクルード・ファイル */ #include #include #include #include #include #include #include #include #include /* ============================================================ */ /* 関数宣言 */ /* ---------------+-----------------------+------------------------ */ /* 型 | 関数名 | 引数 */ /* ---------------+-----------------------+------------------------ */ /* 製図オブジェクト取得関数 */ static void fctTest (); /* ============================================================ */ /* ユーザイグジット */ /* NX のメニュー「ファイル」→「UG/openの実行」→「ユーザファンクション」で */ /* 呼び出される。 */ extern DllExport void ufusr( char *parm, int *returnCode, int rlen ) { /* ---------------------------------------- */ /* Open/APIイニシャライズ */ int errorCode = UF_initialize(); if ( 0 == errorCode ) { /* TODO: Add your application code here */ /* ---------------------------------------- */ /* 製図オブジェクト取得関数 */ fctTest(); /* ---------------------------------------- */ /* Open/API終了 */ errorCode = UF_terminate(); } } /* ============================================================ */ /* ユーザイグジット */ /* 本プログラムが終了する前に呼び出される。 */ extern int ufusr_ask_unload( void ) { return( UF_UNLOAD_IMMEDIATELY ); } /* ============================================================ */ /* 製図オブジェクト取得関数 */ static void fctTest() { tag_t tagCurDraw = NULL_TAG; /* 現在の図面 */ char chrDrawName[30 + 1] = ""; /* 図面名 */ tag_t tagDispPart = NULL_TAG; /* 表示パート */ int intType = 0; /* 検索対象タイプ */ tag_t tagSearchObj = NULL_TAG; /* 検索要素 */ int intObjStatus = 0; /* 要素のステータス */ char chrViewName[UF_OBJ_NAME_LEN + 1] = ""; /* ビュー名 */ tag_t tagView = NULL_TAG; /* ビュー */ UF_VIEW_type_t intViewType = 0; /* ビュー・タイプ */ UF_VIEW_subtype_t intViewSubtype = 0; /* ビュー・サブタイプ */ char * chrToken = NULL; /* ---------------------------------------- */ /* 現在表示されている図面(シート)を取得します。 */ UF_DRAW_ask_current_drawing( &tagCurDraw); /* 現在の図面 */ /* ---------------------------------------- */ /* 現在表示されている図面の名前を取得します。 */ UF_OBJ_ask_name( tagCurDraw, /* 図面 */ chrDrawName); /* 図面名*/ /* ---------------------------------------- */ /* 検索前準備 */ /* 表示パートを取得します。 */ tagDispPart = UF_PART_ask_display_part(); /* ライン・タイプを検索対象とします。 */ intType = UF_line_type; /* 検索要素を最初は「NULL_TAG」にしておきます。 */ tagSearchObj = NULL_TAG; /* ---------------------------------------- */ /* 作業パート内の要素を検索します。 */ while (1) { /* ---------------------------------------- */ /* 検索を開始します。 */ UF_OBJ_cycle_objs_in_part( tagDispPart, /* 検索するパートのタグ */ intType, /* 検索が行われる要素のタイプ */ &tagSearchObj); /* */ /* i:このルーチンへの最終呼出しにより */ /* 検出された要素。 */ /* NULL_TAGに設定することで検索を開始。 */ /* o:指定されたタイプの次の要素。 */ /* 検索が終了するとNULL_TAGを出力。 */ /* ---------------------------------------- */ /* 検索が終了したらループを抜けます。 */ if (NULL_TAG == tagSearchObj) { /* 検索が終了しました。*/ break; } /* ---------------------------------------- */ /* 検索要素がビュー依存か調べます。 */ uc6409( tagSearchObj, /* ビュー依存ステータスチェックのオブジェクト */ &intObjStatus, /* オブジェクトのステータス */ /* 0:ビュー依存ではありません */ /* 1:ビュー依存 */ chrViewName); /* ビュー名 */ /* ---------------------------------------- */ /* 検索要素がビュー依存以外なら次の要素を検索します。 */ if (1 != intObjStatus) { /* ビュー依存以外なので次の要素を検索します。 */ continue; } /* ---------------------------------------- */ /* ビュー名からビューのタグを取得します。 */ UF_VIEW_ask_tag_of_view_name( chrViewName, /* ビュー名 */ &tagView); /* ビュー */ /* ---------------------------------------- */ /* ビューのタイプを取得します。 */ UF_VIEW_ask_type( tagView, /* 指定されたビュー */ &intViewType, /* ビュータイプ */ /* UF_VIEW_MODEL_TYPE */ /* UF_VIEW_DRAWING_MEMBER_TYPE */ /* UF_VIEW_DRAWING_SHEET_TYPE */ &intViewSubtype); /* ビューのサブタイプ */ /* 図面メンバビューのみ */ /* UF_VIEW_INVALID_SUBTYPE */ /* UF_VIEW_SECTION_SUBTYPE */ /* UF_VIEW_IMPORTED_SUBTYPE */ /* UF_VIEW_BASE_MEMBER_SUBTYPE */ /* UF_VIEW_ORTHOGONAL_SUBTYPE */ /* UF_VIEW_AUXILIARY_SUBTYPE */ /* UF_VIEW_DETAIL_SUBTYPE */ /* UF_VIEW_BREAK_SUBTYPE */ /* ---------------------------------------- */ /* ビューのタイプが図面(シート)タイプ以外なら次の要素を検索します。 */ if (UF_VIEW_DRAWING_SHEET_TYPE != intViewType) { /* 図面(シート)タイプ以外なので次の要素を検索します。 */ continue; } /* ---------------------------------------- */ /* ビュー名は「図面(シート)名」+「@***」なので、「@」以降を削除します。*/ chrToken = strstr(chrViewName, "@"); chrViewName[chrToken - chrViewName] = '\0'; /* ---------------------------------------- */ /* 図面(シート)名とビュー名が同じなら現在表示されている図面上の要素と */ /* いうことになります。 */ if (0 == strcmp(chrDrawName, chrViewName)) { /* 現在の図面上の要素 */ /* ---------------------------------------- */ /* 要素を選択状態にします。 */ UF_DISP_set_highlight( tagSearchObj, /* ハイライトをする要素 */ 1); /* 0:ハイライトをオフ */ /* 1:ハイライトをオン */ } /* 検索要素が「NULL_TAG」になるまで検索します。 */ } return; }