/* ******************************************************************************** ** ** GetDrawingObj.c ** ** Copyright 2007 CTC ITOCHU Techno-Solutions Corporation All rights reserved. ** ******************************************************************************** */ /* ====================================================================== 注)パートファイル内にソリッド・ボディが複数作成されていることを前提とします。 ====================================================================== */ /* ============================================================ */ /* インクルード・ファイル */ #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 tagDispPart = NULL_TAG; /* 現在のパート */ int intCnt = 0; /* 検索要素数 */ int intType = 0; /* 検索対象タイプ */ tag_t tagSearchObj = NULL_TAG; /* 検索要素 */ int intObjType = 0; /* 検索された要素のタイプ */ int intObjSubtype = 0; /* 検索された要素のサブタイプ */ tag_t * tagDelObjs = NULL; /* 削除される要素群 */ /* ---------------------------------------- */ /* 現在表示されているパートを取得します。 */ tagDispPart = UF_PART_ask_display_part(); /* ---------------------------------------- */ /* 削除対象の要素の数を初期化します。 */ intCnt = 0; /* ---------------------------------------- */ /* 削除対象の要素を記憶する変数を初期化します。 */ tagDelObjs = NULL; /* ---------------------------------------- */ /* ソリッド・タイプを削除対象とします。 */ intType = UF_solid_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; } /* ---------------------------------------- */ /* 検索された要素のタイプとサブタイプを調べます。 */ UF_OBJ_ask_type_and_subtype( tagSearchObj, /* タイプを調べる要素 */ &intObjType, /* 要素のタイプ */ &intObjSubtype);/* 要素のサブタイプ */ /* ---------------------------------------- */ /* 削除する要素の対象はボディ・サブタイプとします。 */ if (UF_solid_body_subtype != intObjSubtype) { /* ---------------------------------------- */ /* ボディ・サブタイプ以外は対象外とします。 */ continue; } /* ---------------------------------------- */ /* 検索された要素の数をカウントします。 */ intCnt++; /* ---------------------------------------- */ /* 検索された要素を入れる箱を用意します。 */ tagDelObjs = realloc(tagDelObjs, sizeof(tag_t) * intCnt); /* ---------------------------------------- */ /* 検索された要素を記憶します。 */ tagDelObjs[intCnt-1] = tagSearchObj; /* 検索要素が「NULL_TAG」になるまで検索します。 */ } /* ---------------------------------------- */ /* 検索された要素を削除します。 */ UF_OBJ_delete_array_of_objects( intCnt, /* 削除する要素の数 */ tagDelObjs, /* 削除する要素群 */ NULL); /* 削除ステータス */ return; }