2016年10月29日更新
UNIGRAPHICSの不要な知識

マクロ等
マクロはGRIPの実行ライセンスが必要です。
ソースファイルを実行ファイルにするにはGRIPのコンパイルライセンスが必要です。
GRIPの説明はソースファイルの先頭にあります。
水色は左クリックするとダウンロードとはならず,ファイルの内容を表示する可能性があります。
ダウンロードするには,黄色以外のファイルは右クリックでファイルに保存を選んで下さい。(自動的に保存画面が出ません。)
拡張子がlzh以外は圧縮していません。そのまま使用できます。lzhはLhaplus等を使用して解凍して下さい。
ダウンロード後のファイルサイズを確認して下さい。きちんとダウンロードされない事があります。
ウイルスのチェックはしていません。それぞれでチェックして下さい。

  加工工程表です。ug_v16_kouteihyou.prt 212,135バイト 画像 21,912バイト
    製造のテンプレートとしても使用できます。プログラム・工具・機械座標・穴明け・平面加工・固定軸加工・キャビティだけです。
  スライス用の工具設定ファイルです。ug_slice_ball.tlf 16,057バイト ug_slice_bullnose.tlf 8,452バイト ug_slice_flat.tlf 10,149バイト
  ユーザツールバーの設定ファイルです。ug_custom.tbr 940バイト sii\CUSTOM\Startupフォルダに入れると起動時に読込まれます。
    ファイル内のBITMAP項目にビットマップを保存したフォルダ名を追加して下さい。
    ポスト関連の4行はグリップにより外部プログラムを呼び出しているので使用できないと思いますから削除して下さい。
  ユーザツールバーのレイヤ設定のビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーのビューの置換のビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーのレイヤに移動のビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーのレイヤにコピーのビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーのフェースの編集のビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーのCLSFを開くのビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーの情報⇒点のビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーの距離のビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  ユーザツールバーのポストのビットマップです。画像 822バイト 小さいアイコンしか作成していません。
  V18以前の小さいアイコンのファイル名は*_sc.bmpとしていましたが,V18では小さいアイコンのみでは拡張環境変数の失敗となりますから,小さいアイコンのファイル名を*.bmpとします。
  WinBatchEhでこのソース(8,926バイト)を実行してキー入力なしにSIIのポスト処理をしています。
  一つのCLSファイル毎に処理しています。参考程度にしかならないと思います。
  英数文字を直線で作図したUGフォント用のDXFファイルです。ug_font_moji.lzh 13,363バイト
  英数文字の輪郭DXFファイルです。eisuu_rinkaku.lzh 48,013バイト
  使用しているV17のカラー定義ファイルファイルです。ugcolor.lzh 1,788バイト

  連続した数値を書き込みます。GRIPです。ソース 5,740バイト ug_renban.grx 9,922バイト 画像 3,380バイト
  始点側だけの水平・垂直寸法を書き込みます。GRIPです。ソース 33,492バイト ug_dim_note.grx 57,354バイト 画像 10,005バイト
  円弧中心のXとYを書き込みます。GRIPです。ソース 17,107バイト ug_en_hyo.grx 27,514バイト テストなし
  点・直線・円弧だけのDXFファイルを作成します。GRIPです。ソース 16,332バイト ugtodxf.grx 431,010バイト
  2DのCADは円弧の向き(ベクトル)を無視する為に円弧がミラー位置に作成されないようにしています。
  指定要素を指定レイヤに指定数分コピーします。GRIPです。ソース 1,934バイト ug_rayer_copy.grx 2,774バイト
  牧野ワイヤカットのテーパ加工用のNCデータを作成します。GRIPです。ソース 68,706バイト makino_waiya.grx 105,302バイト テストなし
  固定サイクルのNCデータを作成します。GRIPです。ソース 135,596バイト ug_koteisaikuru_ncde-ta.grx 212,806バイト 設定ファイル 8,015バイト テストなし
  CLSファイルのX,YをNCデータのサブプロ風に書き出します。GRIPです。ソース 24,270バイト ug_ana-ncf.grx 35,506バイト 自社用です。使用できないと思います。
  CLSファイルにWCS等を追加,PAINT/COLORの数値の変更,$$SLICE/PAUSE,Z値を追加をします。GRIPです。ソース 19,121バイト clmod_addwcs.grx 25,186バイト 自社用です。使用できないと思います。
  ポスト処理用の外部プログラムを呼び出しています。GRIPです。ソース 408バイト ug_wbat-post.grx 390バイト 自社用です。使用できないと思います。
  パートファイルに書き込んだ属性により表示方向を復元します。GRIPです。ソース 17,943バイト grview_orient_show.grx 58,718バイト
  選択した要素を直線と円弧に変換します。[拡大表示]の表示状態を取得出来ません。GRIPです。ソース 12,543バイト simple_curve.grx 134,786バイト
  ビュー依存要素をモデル要素に変換します。IGESでビューに取り込まれた要素をモデル要素しています。GRIPです。ソース 518バイト view-model.grx 101,518バイト
  選択要素を基準点から移動先に移動します。繰り返す移動先で見た目の移動が可能となると思います。GRIPです。ソース 9,115バイト point_point_move.grx 190,134バイト
  選択した要素を指定したレイヤに移動します。要素移動後に指定レイヤに1が加算されます。GRIPです。ソース 2,228バイト rayer_move.grx 6,330バイト
  直方体と円筒のソリッドが作成できます。V18以降が使いにくい思われてたら使って見て下さい。GRIPです。ソース 15,378バイト block_cylinder.grx 18,602バイト
  高さを持った画面上の位置で直線とスプラインを作成出来ます。3Dのお絵描きが出来るかも。GRIPです。ソース 13,535バイト crt_position_curve.grx 21,410バイト
  座標系の傾きを角度で表示します。情報で表示される内容よりは少しましかなー。GRIPです。ソース 10,707バイト csys_info.grx 13,554バイト
  選択した直線を作業平面に投影してソリッドを切断します。GRIPです。ソース 8,423バイト solid_cut_line.grx 14,946イト
  選択した曲線の端点を移動します。GRIPです。ソース 5,431バイト curve_expand.grx 6,706バイト
  ブーリアン演算を行います。NXが使いにくい思われてたら使って見て下さい。GRIPです。ソース 5,400バイト boolean_operation.grx 6,306バイト
  コピー元パートのレイヤのカテゴリを指定パートにコピーします。GRIPです。ソース 13,025バイト layer_category_copy.grx 108,178バイト
  たぶん要素間の最短距離を測定してリスト表示します。GRIPです。ソース 23,410バイト geometric_distance.grx 25,498バイト
  2曲線間にブリッジの様な同じ半径の2つの円弧を作成します。GRIPです。ソース 22,022バイト fillet_bridge.grx 26,278バイト
  曲線の端点を別な曲線の端点に合う様に曲線全体を変形した曲線を新たに作成。GRIPです。ソース 9,944バイト curve_end_fit.grx 13,334バイト
  パートファイル内の全てのカテゴリを削除します。GRIPです。ソース 2,978バイト category_all_clear.grx 7,286バイト
  たぶん作業座標系での選択オブジェクトでの最大XYZをリスト表示します。GRIPです。ソース 10,135バイト max_xyz.grx 13,206バイト
  3つの曲線に接するフィレットを作成します。GRIPです。ソース 26,444 バイト three_tangent_fillet.grx 36,090 バイト 画像 246 バイト
  指定した色の全てのオブジェクトの色を変更します。GRIPです。ソース 15,130 バイト change_color.grx 20,350 バイト
  レイヤ単位でオブジェクトを移動します。GRIPです。ソース 8,873 バイト layer_unit_move.grx 13,358 バイト
  パートファイル全体のオブジェクトの有るレイヤを選択可能にします。GRIPです。ソース 2,849 バイト object_layer_active.grx 4,990 バイト
  指定した中心で円を作成します。GRIPです。ソース 40,197 バイト specified_center_circle.grx 38,218 バイト
  指定した中心で楕円を作成します。GRIPです。ソース 81,916 バイト specified_center_ellipse.grx 86,350 バイト
  曲線かエッジに接するフィレット(円弧)を作成します。NX OpenとGRIPです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。tangent_fillet_choice.lzh 27,718 バイト
  たぶん2つのオブジェクト間の最短距離を測定してリスト表示します。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。nx2_geometric_distance.lzh 16,032 バイト
  設定した円をハイライトするだけです。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。circle_choice.lzh 23,116 バイト
  選択したオブジェクトに相似の入力した値離れたオフセット曲線を作成します。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。curve_offset_ug.lzh 42,661 バイト 逆方向に作成される時は,こちらを使用して下さい。nx3_curve_offset.lzh 40,402 バイト NX2で作成したパートファイルを,NX3やNX4で開くと,curve_offset_ug で逆方向に作成されました。NX4で作成したパートファイルを,NX4で開くと,curve_offset_ug で正しく作成されました。NX3で作成したパートファイルを,NX4で開くと,方向が不定期でした。nx3_curve_offset は一時的な使用に成ると思います。
  選択した寸法や製図要素とそれを含むグループのオブジェクトを削除します。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。note_delete_ug.lzh 16,770 バイト
  選択した同一直径の数を情報ウィンドウに表示するだけです。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。circle_sum.lzh 28,616 バイト
  選択した円や円筒の座標の表を作成します。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。nx2_arc_center_table.lzh 32,158バイト
  たぶん作業座標系での選択オブジェクトでの最大XYZをリスト表示します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_max_xyz.lzh 4,678 バイト
  番号を昇順または降順で作成します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_consecutive_number.lzh 8,821 バイト
  たぶん2つのオブジェクト間の最短距離を測定してリスト表示します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_geometric_distance.lzh 8,871 バイト
  寸法補助線の付いた引き出し線を作成します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_extension_label.lzh 27,870 バイト
  選択したオブジェクトを指定したレイヤに移動します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_continuous_layer_move.lzh 4,932 バイト
  全てのカテゴリを削除か,コピー元パートファイルのカテゴリを,指定パートファイルに複写します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_category_copy_all_clear.lzh 8,546 バイト
  ビュー従属オブジェクトを,モデルオブジェクトに変換します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_view_convert_model.lzh 2,823 バイト
  選択したオブジェクトを指定したレイヤ以降の連続したレイヤにコピーします。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_continuous_layer_copy.lzh 5,089 バイト
  レイヤ単位でオブジェクトを移動します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_layer_unit_move.lzh 5,776 バイト
  原点側の無い,片側の累進寸法を作成します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_one_side_ordinate_dimension.lzh 28,714 バイト
  選択した直線を作業平面に投影してボディを分割します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_body_split_line_axis.lzh 9,219 バイト
  選択した同一直径の数を情報ウィンドウに表示するだけです。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_circle_sum.lzh 8,422 バイト
  2曲線間にブリッジの様な同じ半径の2つの円弧を作成します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_two_arc_bridge.lzh 18,376 バイト
  指定した中心で円を作成します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_specified_center_circle.lzh 17,223 バイト
  指定した中心で楕円を作成します。NX4 ジャーナルです。使用説明は解凍したファイルの先頭にあります。nx4_specified_center_ellipse.lzh 21,801 バイト
  アセンブリファイルでugpc.exeにより抽出されたファイルをコピーします。 ug_assemblie_copy.vbs 8,043バイト 説明はソースファイルの先頭にあります。VBScriptで作っています。
  syslogファイルから&MACRO行を抽出します。syslog_macro.lzh 1,611バイト 説明はソースファイルの先頭にあります。VBScriptで作っています。
  [入力パート]以外のアセンブリパートファイル内のコンポーネントパートファイルを置き換えます。VC++6で作成 ヘルプ 20,337 バイト edit_part_names.exe 94,208 バイト ソース 90,197 バイト 任意のフォルダに edit_part_names.exe を入れる時には,かなりの数のエラーで表示された libufun.dll 等を edit_part_names.exe のフォルダに入れる必要が有る為に,私は Unigraphics インストールフォルダ\UGII に edit_part_names.exe と edit_part_names.exe を入れました。EDIT_PART_NAMES.HLP は edit_part_names.exe と同じホルダに入れて下さい。VC++のソースをダウン後に解凍して,VC++でコンパイルして,hlp\polyline_subtract.hpj(1) : error:とエラーが表示されましたら,ヘルプファイルのコンパイルエラーですから,ソースのフォルダ\hlp\polyline_subtract.hpjをメモ帳等で開いて,下から2行目の #include <??\VC98\MFC\include\afxhelp.hm> の??をVC++をインストールしたフォルダ名に変更して保存してからリビルドして下さい。
  複数の任意位置に点指示のみで平行移動のコピーします。NX Openです。使用説明は解凍したフォルダ内の 読んでね.txt を読んで下さい。NX2とNX3⇒point_point_copy.lzh 18,540 バイト NX4⇒NX4_point_point_copy.lzh 1,154,493 バイト 画像 406 バイト NX4 で uf_trns のコマンドが変わっている為に,使用バージョンに合うファイルを使用して下さい。

NX8.5 以下は色が変わり色の修正の為に作成
  カラー定義ファイルファイルです。nx85_ugcolor.zip 2,945 バイト



  製造のテンプレートです。ドリル加工・ペックドリル加工・平面ミル加工・フェースミル加工・Zレベルミル加工・キャビティミル加工・固定軸コンタ加工・プログラム・ツール・ジオメトリ・方法だけです。original_cam_template_nx85.prt 373,248 バイト



  ポストです。nx85_command.zip (28,664 バイト 工具交換の無い自社用の為に使用できないと思います。
  番号を昇順または降順で作成します。GRIPです。ソース 2,224 バイト nx85_serial_number.grx 7,322 バイト ug_renban と同じです。
  始点側だけの水平・垂直寸法を作成します。GRIPです。ソース 7,273 バイト nx85_extension_join_leader.grx49,018 バイト ug_dim_note と同じです。
  CLSファイルにFROM等を追加,PAINT/COLORの数値の変更,SELECT・LOADを削除します。GRIPです。ソース 3,531 バイト nx85_cls_from_color_select.grx 22,090 バイト 自社用の為に使用できないと思います。clmod_addwcs と似てます。



  指定した色の全てのオブジェクトの色を変更します。GRIPです。ソース 4,034 バイト nx85_change_color.grx 20,378 バイト change_color と同じです。



  CLSファイルのX,YをNCデータのサブプロ風に書き出します。NX9 GRIPです。ソース 5,272 バイト nx9_hole_ncf.grx 35,546 バイト 自社用です。使用できないと思います。ug_ana-ncf.grx を続けて使用できる様にしただけです。



  原点側の無い,片側の累進寸法を作成します。NX9 GRIPです。ソース 41,478 バイト nx9_extension_join_leader.grx 49,018 バイト ug_dim_note.grx の色を変えただけです。



  選択したソリッドボディかシートボディを分割して削除できます。NX8.5 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx85_body_split_delete.zip 17,478 バイト



  選択した寸法や製図要素とそれを含むグループのオブジェクトを削除します。NX8.5 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx85_drafting_entity_delete.zip 2,732 バイト note_delete_ug と同じです。



  選択した円や円筒の座標の表を作成します。NX8.5 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx85_cylinder_center_table.zip 12,508 バイト nx2_arc_center_table とほぼ同じです。



  CLSFの表示やインポートします。NX8.5 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx85_clsf_draw_import.zip 18,750 バイト nx85_cls_from_color_select の一部を含みます。



  選択した曲線を作業座標系の Z0 に投影して面積を情報ウィンドウに表示します。NX8.5 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx85_Project_Area.zip 4,697 バイト



  [グリッド]の[メジャー線を表示]を変更するだけです。NX9.0 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx90_grid_major_lines_change.zip 1,506 バイト



  選択した[寸法]や[注記]に半角片仮名が含まれていると全角片仮名に変更します。NX9.0 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx90_half_katakana_full_change.zip 3,246 バイト



  選択した[保持された注釈]を表示している差し替えたモデルに再関連付けします。NX9.0 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx90_dimension_retain.zip 54,554 バイト



  マシンコードファイル(NCF)を作業座標系で直線と円弧と螺旋で表示するだけです。NX9.0 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx90_numerical_control_draw.zip 75,604 バイト



  CLSFの表示をします。NX10 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx10_clsf_draw.zip 45,574 バイト nx85_clsf_draw_import の縮小版です。



  選択したソリッドボディかシートボディを[分割]して[削除]できます。NX10 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx10_body_split_delete.zip 38,804 バイト nx85_body_split_delete の縮小版です。



マシンコードファイル(ncf)でのシミュレーション(sim)の準備をします。NX10 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx10_ncf_sim_setup.zip 138,612 バイト



作業座標系での円をソリッドと円筒の[積]での最大Z+として円からの[ドラフト]でソリッドの底面までの円錐台を作成します。NX10 GRIPです。使用説明は解凍したソースファイルの先頭に有ります。ソース 5,713 バイト nx10_circular_truncated_cone.grx 6,622 バイト



sim01_mill_3ax.prt にポケットを追加します。NX10 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx10_machine_pocket_add.zip 7,342 バイト



マシンコードファイル(ncf)でのシミュレーション(sim)の準備をします。NX10 ジャーナルです。使用説明は解凍したファイルの先頭に有ります。nx10_change_sim_setup.zip 124,206 バイト nx10_ncf_sim_setup の縮小版です。



  選択したカッタ位置ソースファイル(clsf)を数値制御ファイル(ncf)に変換します。VC2008SP1 32bitです。clsf_ncf_convert_exe.zip 実行ファイルとヘルプ 28,758 バイト ソース 9,186,728 バイト



  nx8.5のclsファイルにFROM,WCS,USRSEQの追加やPAINT/COLORの数値を変更します。WZ EDITOR V5.03です。使用説明は解凍したファイルの先頭に有ります。wz503_nx85_clsf_usrseq_color.zip 2,962 バイト 自社用です。使用できないと思います。2.7MBのclsファイルの編集にnx85_clsf_draw_importは85秒がwz503_nx85_clsf_usrseq_colorは2秒でした。



  NX9のカラー定義ファイルファイルです。nx9_ugcolor.zip 2,955 バイト [バックグラウンド]は灰色です。上から3段目が緑,水色,マゼンタ,赤,黄色です。青だけが一段下がっています。一番下が一つ置きにグレースケールです。[バックグラウンド]の灰色を濃くしました。



NX2の問題点
パートファイルを開いただけで「変更」と成る。⇒気にせず,パートファイルをそのまま閉じています。[ファイル]⇒[ファイルオプション]⇒[保存時オプション]の[図面CGMデータを保存]のチェックを外したパートファイルは表示されなく成りました。
IGESが絶対座標系でも作業座標系基準でも無く書き出しされる。⇒UGを閉じて,再度開いてIGES出力すると,絶対座標系基準で書き出される。
[作業座標系の表示]が勝手にOFFに成る。⇒[作業座標系の表示]をONにしてます。
製図に入ると先回表示していた図面と違う図面が表示される。⇒表示させたい図面を選択して表示させています。
文字下の引き出し線が作成出来ない。⇒[編集]⇒[引き出し線]で変更しています。
絶対座標系でIGES,パートが書き出されない。⇒操作順番は不明ですが,操作にパートの保存,図面にビューを貼り付け,座標系の移動が含まれると起こる様です。パートを開き直す事で解消出来ます。症状の検査用にマクロを作りました。新規パートで再生して下さい。マクロの内容は直方体の作成,座標系の移動,パートの保存,ビューを貼り付け,パートの保存,絶対座標系に戻す,IGESの書き出しです。書き出されたIGESを読み込むと元の直方体と一致しないと思います。nx2_iges_out_bad.lzh 1,675バイト
固定軸投影加工でテンプレートの回避面を削除出来ない。⇒現在までは問題とは成っていない為に,テンプレートの回避面を残したままでパスを作成しています。
[CLSFの出力]が選択出来ない。⇒オペレーションをコピーしてツールを変更後にダイアログをOKして閉じないと成り,ツールを変更後にダイアログをOKして閉じて,再度ダイアログを表示してパスを作成すると[CLSFの出力]が有効と成りました。
製造で[境界]を[再選択]するとエラーと成る。⇒[境界]の[編集]で[削除]して[境界]を設定し直しています。
500MBのパートファイルで少し作業をすると仮想メモリ不足と成りました。パートファイルを開いた時点で1.6GBのメモリを使用し,仮想メモリ不足と成るまでのメモリ使用可能容量は200MBぐらいと思います。

ちょこっとUGのIGES設定
取り込み
BSURFACE_MAP B曲面
 On B曲面は平面,球,円錐,円筒,円環に単純化
 Off B曲面を単純化しない
SURFOFREV_MAP 回転面
 On 回転面は球,円錐,円筒の解析曲面に変換
 Off 回転面のまま 球は回転面のままが取り込みやすい
VIEWMOD_MAP ビュー依存の要素
 On モデル要素に変換
 Off ビュー依存の要素のまま
SMOOTH_BSURFS スムースB曲面 FIXUP_TOL値を使用
 On B曲面をG1不連続で平滑化
 Off B曲面のまま
IGES_ATTRIBUTE IGES要素に属性
 On IGESというタイトルを持つ属性をIGES要素に追加
 Off 属性を追加しない
SUPRESS_LABELS ワイヤフレーム要素に対するディレクトリエントリラベル名
 On ラベル名を取り込み
 Off ラベル名を取り込まない
SCALE_TEXT_AND_ARROWS スケールテキストと矢印 IGES一般注記,一般シンボルに従属する円弧要素の半径,引出し線要素の高さと幅
 On スケールが1ではないIGES一般注記がビューの図面スケールで割られます
 Off ラベル名を取り込まない
AUTOMATIC_SURF_SEW 曲面の自動ソー
 On 自動的にソーしてソリッドとします
 Off ソーしない
RULED_SURFACE_MAP ルール面
 Cylinder ルール面を円筒に変換
 B-Surface ルール面をB曲面に変換
SUBTEXT_MAP 注釈 サブフィギュアテキスト/寸法
 Visible in Componet Part Only コンポーネントのみで可視
 Visible in Component and Assembly Parts コンポーネントとアセンブリで可視
COPIOUS_DATA_MAP
 Group of Cubic NURB Best-Fit Splines 3次元のNURBが最も良くスプラインにフィットします
 Group of Linear NURB Splines 直線NURBスプライン
 Group of Lines 直線のグループ
UGI_COMP_FAIL
 Continue if Load Fails ロードが失敗する場合、継続します
Abort if Load Fails ロードが失敗する場合、中断

書き出し
JAMA 日本自動車工業会規格準拠
 On 日本自動車工業会規格準拠で書き出し
 Off 日本自動車工業会規格を使用しない
OUTPUT_FORMAT 再フォーマット済みとして出力 80文字で改行
 On 再フォーマット済みとして出力
 Off 未フォーマットファイルとして出力
ASSEMBLY_MAP アセンブリのフラット化
 On コンポーネント形状を展開されたグループ形状として出力
 Off アセンブリ構造が保持され出力
PERIODIC_SURFACE_MAP 周期的曲面
 On 周期的曲面を分割面で書き出し
 Off 周期的曲面のまま書き出し
TRIMMED_SURFACE_MAP トリムされた曲面
 On トリムされた曲面を非トリム面で書き出し
 Off トリムされた曲面のまま書き出し
TABCYL_MAP タブシル面 平らにした円柱
 On タブシル面をB曲面で書き出し
 Off タブシル面のまま書き出し
SURFREV_MAP 円錐,球体,円環体などの回転フェース
 Surface of Revolution 回転曲面で書き出し 120
 B-Surface B曲面で書き出し 128
CROSSHATCH_MAP ハッチング
 Sectioned Area クロスハッチデータを単一の要素としてグループ化
 Copious Data クロスハッチを個々の直線要素として表現
COLOR_FONT_MAP 色の書き出し方法
 IGES Color Number 黒,赤,緑,青,黄,マゼンタ,シアン,白のみで書き出し
 Color Definition 色定義を作成 作成した要素色で書き出し
LINE_FONT_MAP 直線の種類
 IGES Line Font Number
 Line Font Definition
UGI_CURVE_MASK 書き出し要素
 All Solid Edges ソリッドのエッジ曲線を書き出し
MAX_LINE_THICK 線の太さの最大 0.0から25.4
IGES_BLACK 黒色要素の書き出し色 blackredgreenblueyellowmagentacyanwhitedefault
IGES_WHITE 白色要素の書き出し色 blackredgreenblueyellowmagentacyanwhitedefault

模倣が危険なCAM
200x200x30のケミカルウッドはΦ4ボール⇒F2500,S6000 Φ6⇒F3000 200x200x30のMCナイロンはΦ4ボール⇒F1200,S5000 om_modeさんからの情報です。
以下は鉄での加工です。チャックから工具先端までを刃出とします。^は階乗を表し,3^3=27,25^0.5=5となります。Dは直径です。
等高荒取り時のZ切り込み量をD^1.37/33でΦ20ボール⇒1.84,Φ12ボール⇒0.91で,XYピッチをD*0.35でしています。30%が良い様にも思いますが。
等高加工の荒取り時(中荒)のXYピッチをD*0.15でしています。Φ20ボール⇒3,Φ12ボール⇒1.8です。
仕上げ時のZ切り込み量,XYピッチ共にD^0.5/7でしています。スカラップの0.007ねらいです。Φ20ボール⇒0.64,Φ12ボール⇒0.49です。
回転数は鉄は12000/Dでしています。Φ20⇒S600,Φ12⇒S1000です。銅は16000/D,鉄でのラフィングは8000/Dでしています。
荒取り時はF200 切り込みF30,仕上げはF300 切り込みF35でしています。
未完ですがZ切り込み量は(D*D/4)/刃出でしています。Φ10,刃出50⇒0.5,Φ10,刃出80⇒0.31,Φ6,刃出30⇒0.3,Φ6,刃出50⇒0.18です。Φ6未満はD*0.03でしています。刃出は8Dが限界です。Φ2の有効長は20,Φ1の有効長は12まで使用しています。

VisualC++6とNX2
設定
[ツール]⇒[オプション]の[ディレクトリ]タブの[表示するディレクトリ]の[インクルードファイル]に UGインストールフォルダ\UGOPEN を追加。
[ツール]⇒[オプション]の[ディレクトリ]タブの[表示するディレクトリ]の[ライブラリファイル]に UGインストールフォルダ\UGOPEN を追加。
[ツール]⇒[オプション]の[エディタ]タブの[ウィンドウの設定]の[ドラック&ドロップ編集]のチェックを外す。
[ツール]⇒[オプション]の[タブ]タブの[自動インデント]の[しない]をチェック。
[ツール]⇒[オプション]の[書式]タブの[カテゴリ]の[すべてのウィンドウ]で[フォント]をMS明朝に[サイズ]を10。
DLLの作成
[ファイル]⇒[新規]の[プロジェクト]タブでMFC AppWizard(dll)を選択して,[プロジェクト名]を入力し[位置]を指定し[OK]ボタンをクリックし[MFCの共有DLLを使用]のチェックと[ソースファイルのコメントを生成しますか?]の[する]のチェックと[オートメーション]の未チェックと[Windowsソケット]の未チェックを確認して[終了]ボタンをクリックし[新規プロジェクト情報]ダイアログの[OK]ボタンをクリック。
[ワークスペース]ウィンドウの[FileView]タブで Resource Files フォルダと Header Files フォルダと StdAfx.cpp ファイルと プロジェクト名.rc ファイルと ReadMe.txt ファイルをDeleteキーで削除。Openユーザインタフェーススタイラでプロジェクト名でダイアログを作成した時は,Header Files フォルダは削除せずに Resource.h ファイルと StdAfx.h ファイルを削除。
[ビルド]⇒[アクティブな構成の設定]で[Win32Release]を選択し[OK]ボタンをクリック。
[プロジェクト]⇒[設定]の[設定対象]で[Win32Release]を選択しプロジェクトを選択し,[C/C++]タブで[カテゴリ]で[プリコンパイル済みヘッダー]の[プリコンパイル済みヘッダーを使用しない]を選択し,[リンク]タブで[カテゴリ]で[一般]を選択し[オブジェクト/ライブラリモジュール]に libufun.lib libugopenint.lib を入力し[OK]ボタンをクリック。
プロジェクトを作成したフォルダ内の Debug フォルダと res フォルダと ReadMe.txt ファイルと Resource.h ファイルと StdAfx.cpp ファイルと StdAfx.h ファイルと プロジェクト名.h ファイルと プロジェクト名.rc ファイルを削除。
外部NX Open APIプログラムで UF_terminate() をメンバ関数に入れて,何度も呼び出す事は出来ませんでした。UF_initialize() でエラーと成りました。UF_initialize() を OnInitDialog() に入れて,UF_terminate() を OnCancel() に入れました。
VisualC++の雑記
クラス等が表示されなくなり,同じ名前のグローバル変数が2つ表示された時に,拡張子が ncb のファイルを削除してワークスペースを開くと,クラスとグローバル変数が正しく表示され,拡張子が ncb のファイルは作成されていました。
_spawnl では空白を含んでいるとエラーと成り," で括ってもエラーと成り,代わりの CreateProcess の第1引数に空白を含んで " で括ったファイルでもエラーと成り,第2引数に空白を含んで " で括ったファイルで出来ました。
バッチファイルで % で括った環境変数を " で括っても空白を含んでいるとエラーと成る様で,set の環境変数を設置時に " で括る必要が有る様です。
オートメーションでポインタ使用変数には配列は使用不可 動作不安定
Class Wizardでは関数を削除しない cppファイル内の関数は残る ClassView⇒関数選択⇒右クリック⇒削除選択
EN_UPDATE EN_CHANGEは一文字入力で動作
DDV DDXはオーバーフロー無視 最小値・最大値を設定する float⇒±3.4e38
cppファイル間での同一変数の使用は外部変数(グローバル)にする 作成変数はcppファイルのインクリードファイルの下に記入 参照変数はcppファイルのインクリードファイルの下にexternを付けて記入 ヘッダーファイルでは外部変数は作成できない
動的配列で[1]での delete 変数名 はエラーとなる 配列数+1とする long* lon=new long[m_sakusei+1];
forでは初期化式で使用した変数で条件式・ループ式を記述 ほかの変数を記述するとfor関係の式は実行しない
チェックボックスは必ず自動に設定する クリックしてもチェックされない
ダイアログはオーバラップと細線で、コントロールとキャプションが有効
CStringに配列はない 配列は文字位置指定となる
配列宣言は個数を設定 要素はゼロから個数-1
テキスト内の文字を設定⇒コントロール.SetWindowText(CString) か コントロール.SetWindowText("文字")
テキスト内の文字を所得⇒コントロール.GetWindowText(CString)
文字のアスキーコードを取得⇒char[文字位置]
文字変数の宣言⇒char *変数名
クラスを横断して使用する関数の宣言⇒静的に宣言(static)⇒public で static 戻り値データ型 関数名(受け渡し変数)
#include "math.h" //三角関数
OnInitDialog()はWindowメッセージハンドラの追加⇒ダイアログ⇒WM_INITDIALOGを追加後にClassWizardを使用
アウトライン曲線 GetGlyphOutline http://www.inet-lab.org/ted/program/prog174.html http://www.topposystem.co.jp/Index.htm
hlp\polyline_subtract.hpj(1) : error:⇒\hlp\polyline_subtract.hpj⇒#include <C:\Program Files\Visual Studio\VC98\MFC\include\afxhelp.hm>
配列全体を関数に渡す 宣言⇒関数名(変数タイプ 変数名[]) 呼び出し⇒関数名(変数名) 関数処理後呼び出し側変数の値が関数処理の値に変わる
Dlg* m_Dlg;m_Dlg=new Dlg();m_Dlg->Create(IDD_DIALOG,NULL);m_Dlg->ShowWindow(SW_SHOW);はオーバラップで作成(ポップアップは不可)
尺度 1/50000

≪ダイアログの改行キーの無効化≫
ClassWizard⇒オブジェクトID⇒ダイアログ⇒メッセージ⇒PreTranslateMessage⇒関数の追加

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg){
  // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
  if(pMsg->message==WM_KEYDOWN){  //キー操作時
    if(pMsg->wParam==VK_RETURN){  //改行時
      return TRUE;  //動作抑制
    }
  }
  return CDialog::PreTranslateMessage(pMsg);
}
≪ダイアログの改行キーの無効化≫

≪ダイアログの最大化・サイズ変更を無効≫
windowsメッセージハンドラの追加⇒ウィンドウ⇒WN_SYSCOMMAND

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam){
  // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
  switch(nID){
    case SC_MAXIMIZE:  //最大化を選択時
      AfxMessageBox("最大化は使用できません。");  //メッセージ表示
      break;  //ステートメント終了
    case SC_SIZE:  //サイズ変更を選択時
      AfxMessageBox("サイズ変更は使用できません。");  //メッセージ表示
      break;  //ステートメント終了
    default:
      CDialog::OnSysCommand(nID, lParam);  //システムコマンド実行
  }
}
≪ダイアログの最大化・サイズ変更を無効≫

≪RAPIDオートメーション≫
stdafx.h⇒#include <afxdtctl.h>  // MFC の Internet Explorer 4 コモン コントロール サポート

BOOL CTastApp::InitInstance(){
  // 標準的な初期化処理
  // もしこれらの機能を使用せず、実行ファイルのサイズを小さくしたければ以下の特定の初期化ルーチンの中から不必要なものを削除してください。

#ifdef _AFXDLL
  Enable3dControls();  // 共有 DLL 内で MFC を使う場合はここをコールしてください。
#else
  Enable3dControlsStatic();  // MFC と静的にリンクする場合はここをコールしてください。
#endif

  if (!AfxOleInit()){  //OLE DLL初期化
    AfxMessageBox("OLEの初期化に失敗しました。\n 終了します。");  //メッセージ表示
      return FALSE;  //作成破棄
  }

  CTastDlg dlg;
  m_pMainWnd = &dlg;
  int nResponse = dlg.DoModal();
  if (nResponse == IDOK){
    // TODO: ダイアログが <OK> で消された時のコードを記述してください。
  }else if (nResponse == IDCANCEL){
    // TODO: ダイアログが <キャンセル> で消された時のコードを記述してください。
  }

  // ダイアログが閉じられてからアプリケーションのメッセージ ポンプを開始するよりは、アプリケーションを終了するために FALSE を返してください。
  return FALSE;
}

BOOL CTastDlg::OnInitDialog(){
  CDialog::OnInitDialog();
  // このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメインウィンドウがダイアログでない時は自動的に設定しません。
  SetIcon(m_hIcon, TRUE);  // 大きいアイコンを設定
  SetIcon(m_hIcon, FALSE);  // 小さいアイコンを設定
  // TODO: 特別な初期化を行う時はこの場所に追加してください。

// if (!m_AppRapid.CreateDispatch(_T("zwRAPID7"))){  //オブジェクト作成
//   AfxMessageBox("図脳RAPIDが登録されていません。\n 終了します。");  //メッセージ表示
//   EndDialog(IDABORT);  //ダイアログ終了
//   return FALSE;  // 作成破棄
// }
  CString cStr1="zwRAPID",cStr2;
  int i;
  for(i=6;i<=99;i++){  //繰返し
    cStr2.Format("%u",i);  //数値を文字に変換
    if (m_AppRapid.CreateDispatch(cStr1+cStr2))break;  //オブジェクト作成成功時繰返し終了
  }
  if (i>=99 || m_AppRapid.Application()==NULL){  //図脳RAPID検査
    AfxMessageBox("図脳RAPIDがありません。\n 終了します。");  //メッセージ表示
    EndDialog(IDABORT);  //ダイアログ終了
    return FALSE;  // 作成破棄
  }
  m_Rapid.m_lpDispatch=m_AppRapid.Application();  //図脳RAPID取得
  if (m_Rapid.GetDoc()==NULL){  //図面検査
    AfxMessageBox("図脳RAPIDを起動して、\n 図面を表示してから実行して下さい。");  //メッセージ表示
    EndDialog(IDABORT);  //ダイアログ終了
    return FALSE;  // 作成破棄
  }
  m_AppRapid.m_lpDispatch=m_Rapid.GetDoc();  //図面取得
  double w_wid=0,w_hei=0,w_sph=0,w_spv=0;
  m_AppRapid.GetSysModalScalableTextSize(&w_wid,&w_hei,&w_sph,&w_spv);

  return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CMyDlg::OnDestroy(){
  WinHelp(0L, HELP_QUIT);
  CDialog::OnDestroy();

  m_Rapid.ReleaseDispatch();  //オブジェクト解放
  m_AppRapid.ReleaseDispatch();  //オブジェクト解放
}
≪RAPIDオートメーション≫

≪メッセージの取得≫
MSG msg;
if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)){
  GetMessage(&msg,NULL,0,0);
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}
≪メッセージの取得≫
PeekMessage(uMsg, rfrmForm.hwnd, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE);  //キーボードからのメッセージの空読み
PeekMessage(uMsg, rfrmForm.hwnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE);  //マウスからのメッセージの空読み

データ変換
文字列操作
CString クラス メンバ

形状  順序  インデックス 挿入 検索 重複
CArray ○   int      遅い 遅い ○
CList  ○   ×      速い 遅い ○
CMap  ×   キー     速い 速い キーは× 値は○

CList<long,long> li_en;  //要素リストの構築
li_en.AddTail(lon1[0]);  //要素リストに追加
li_en.RemoveAll();  //要素リストの開放

//2次元動的配列
int i,j;
//領域の動的確保
int **mat=new int*[row];  //行を作る
for(i=0;i<row;i++)mat[i]=new int[col];  //列を作る

//行列の値を設定
for(i=0;i<row;i++)
  for(j=0;j<col;j++)
    mat[i][j]=10*(i+1)+(j+1);

//領域の解放
for(i=0;i< row;i++)delete [] mat[i];  //列を解放
delete [] mat;  //行を解放

CFile の2つの引数で例外が try と catch では取得できずにエラーに成り CStdioFile を使用しました。
CFile の GetLength の改行は2文字で Read は1文字と成るので不明な文字が追加と思われます。Read の実際に読み込んだバイト数の位置を '\0' にしました。Read の一気に読み込みは一瞬でした。int i=f.Read(p,f.GetLength());p[i]='\0';
OnInitDialog() でタブ選択は OnSelchangeコントロール名(NULL,NULL); として OnSelchangeコントロール名(NULL,NULL); 内の *pResult=0; を if(pResult)*pResult=0; として OnInitDialog() のエラーを回避しました。
OnInitDialog 内でグローバル変数を new して,関数内で delete[] は if(関数)return TRUE; でエラーが出なく成りました。

VisualStudio2008とNX4
VisualStudio2008 の使用
VisualStudio2008 のインストール時にVisual C++のみにすると,ビルド時に必要な cl.exe がインストールされず,error PRJ0003 : 'cl.exe' の起動中にエラーが発生しました。と成るので,Visual C#もインストールで解決しました。
MFCの使用法⇒共有DLLでMFCを使用。スタティックライブラリでMFCを使用ではアプリケーションのファイルサイズがかなり増すが,コードがプログラムに組込まれる為に,そのライブラリがなくても動作するそうです。標準 Windows ライブラリを使用する ではビルド時にエラーと成りました。
UNICODEライブラリを使用する のチェックを外す。文字セット⇒マルチバイト文字セットを使用する と成る様です。
ダイアログアプリケーションの最小構成で,stdafx.h ファイルの targetver.h afxext.h afxdtctl.h afxcmn.h を無効にしてビルド出来ました。
VisualStudio2008 に NX4 Open Wizard を追加
OSがVistaの場合はユーザーアカウント制御 (UAC)の為にフォルダにコピー後にファイルの内容の変更が反映されない為に,ファイルの内容を変更後にフォルダにコピーしました。
NX4インストールフォルダ\ugopen\vc7_files\vcprojects フォルダ内の全てのファイルを VisualStudio2008インストールフォルダ\VC\vcprojects フォルダにコピー ( NX4_Open.ico NX4_Open.vsdir NX4_Open.vsz)。
VisualStudio2008インストールフォルダ\VC\vcprojects\NX4_Open.vsz ファイルを開き,Wizard=VsWizard.VsWizardEngine.7.1 を Wizard=VsWizard.VsWizardEngine.9.0 に変更。 VisualStudioの使用バージョンと合わせないと使用出来ないと思われる。
NX4インストールフォルダ\ugopen\vc7_files\VCWizards\NX4_Open フォルダを VisualStudio2008インストールフォルダ\VC\VCWizards フォルダにコピーしました。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\html\1033\default.htm ファイルを開き,411行目の先頭に // を追加して,NextBtn.focus(); をコメントとしました。 focus() が使用出来ないと思われる。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\html\1033\AppSettings.htm ファイルを開き,357行目の先頭に // を追加して,NextBtn.focus(); をコメントとしました。 focus() が使用出来ないと思われる。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\scripts\1033\default.js ファイルを開き,39行目の先頭に // を追加して,var InfFile = CreateInfFile(); をコメントとしました。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\scripts\1033\default.js ファイルを開き,40行目の AddFilesToProject(selProj, strProjectName, InfFile); を AddFilesToProjectWithInfFile(selProj, strProjectName); に変更。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\scripts\1033\default.js ファイルを開き,45行目の先頭に // を追加して,InfFile.Delete(); をコメントとしました。
default.js の39行目と40行目と45行目は,AddFilesToProject が AddFilesToProjectWithInfFile に変更され,AddFilesToProjectWithInfFile に var InfFile = CreateInfFile(); と InfFile.Delete(); が内包された為と思われる。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\scripts\1033\default.js ファイルを開き,173行目の config.CharacterSet=charSetUnicode; を config.CharacterSet=charSetMBCS; に変更する事により,Debug の文字セット⇒マルチバイト文字セットを使用する と成りました。 charSetUnicode は UNICODEライブラリを使用する。
VisualStudio2008インストールフォルダ\VC\VCWizards\NX4_Open\scripts\1033\default.js ファイルを開き,219行目の config.CharacterSet=charSetUnicode; を config.CharacterSet=charSetMBCS; に変更する事により,Release の文字セット⇒マルチバイト文字セットを使用する と成りました。charSetUnicode は UNICODEライブラリを使用する。
蛇足
NX4_Open.vsz ファイルに Param="RELATIVE_PATH = NX4_Open フォルダのフルパス" を設定する事により,NX4_Open フォルダを任意に設定出来るが,default.htm ファイルや AppSettings.htm ファイルや EntryPoints.htm ファイルの,
var strPath = "../../../";strPath += window.external.GetHostLocale();var strScriptPath = strPath + "/Script.js";var strCommonPath = strPath + "/Common.js";document.scripts("INCLUDE_SCRIPT").src = strScriptPath;document.scripts("INCLUDE_COMMON").src = strCommonPath;
あたりの変更等が必要に成ると思われる。
VisualStudio2008 での NX4 Open Wizard の仕様
NX4 Open Wizard の使用により,MFCの使用法⇒共有DLLでMFCを使用 と成りました。
NX4 Open Wizard の使用の DLL で C を選択により,C/C++⇒追加のインクルードディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加のライブラリディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加の依存ファイル⇒ libufun.lib libugopenint.lib と成りました。
NX4 Open Wizard の使用の DLL で C++ を選択により,C/C++⇒追加のインクルードディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加のライブラリディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加の依存ファイル⇒ libufun.lib libnxopencpp.lib libugopenint.lib libnxopenuicpp.lib と成りました。
NX4 Open Wizard の使用の DLL で Use Open++ Calls をチェックにより,C/C++⇒追加のインクルードディレクトリ⇒$(UGII_BASE_DIR)\\ugopen$(UGII_BASE_DIR)\\ugopenpp ,リンカ⇒追加のライブラリディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加の依存ファイル⇒ libufun.lib libnxopencpp.lib libugopenint.lib libnxopenuicpp.lib libopenpp.lib libopenintpp.lib libvmathpp.lib と成りました。
NX4 Open Wizard の使用の EXE で C を選択により,C/C++⇒追加のインクルードディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加のライブラリディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加の依存ファイル⇒ libufun.lib と成りました。
NX4 Open Wizard の使用の EXE で C++ を選択により,C/C++⇒追加のインクルードディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加のライブラリディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加の依存ファイル⇒ libufun.lib libnxopencpp.lib と成りました。
NX4 Open Wizard の使用の EXE で Use Open++ Calls をチェックにより,C/C++⇒追加のインクルードディレクトリ⇒$(UGII_BASE_DIR)\\ugopen$(UGII_BASE_DIR)\\ugopenpp ,リンカ⇒追加のライブラリディレクトリ⇒$(UGII_BASE_DIR)\\ugopen ,リンカ⇒追加の依存ファイル⇒ libufun.lib libnxopencpp.lib libopenpp.lib libvmathpp.lib と成りました。
NX4 Open Wizard の Automatically (ufsta) か Explicitly (ufusr) か From a User Exit のいずれかをチェックしないと,メモリが不足しています と成りました。MenuScriptファイル 等でUG起動時に読み込ませる場合は ufsta で,それ以外は ufusr とする様です。
NX4 Open Wizard の when the NX session terminates では ufusr_ask_unload が UF_UNLOAD_UG_TERMINATE と成り,when the application completes では UF_UNLOAD_IMMEDIATELY と成り,via an unload dialog では UF_UNLOAD_SEL_DIALOG と成りました。 when the application completes とする。
UF_UNLOAD_UG_TERMINATE では排他の為か DLL 実行後にビルドすると上書き出来ませんでした。UF_UNLOAD_IMMEDIATELY では DLL 実行後にビルド出来ました。 UF_UNLOAD_SEL_DIALOG は不明。
VisualStudio2008 で NX4 の DLL の作成
Openユーザインタフェーススタイラで作成したオブジェクトの選択可能なダイアログでは,オブジェクトを選択後にダイアログを閉じて,デストラクタ のみ呼び出される。OKや適用は呼び出されませんでした。デストラクタ で return (UF_UI_CB_CONTINUE_DIALOG); としてもダイアログは閉じました。
Openユーザインタフェーススタイラで作成したダイアログを表示する度に コンストラクタ が呼び出されました。コールバック タブで ダイアログの作成 をチェックしたアイテムの動作後のダイアログの表示では コンストラクタ は呼び出されませんでした。
Openユーザインタフェーススタイラで作成したダイアログで 戻るボタン で return (UF_UI_CB_CONTINUE_DIALOG); でダイアログを表示したままと出来ました。
Openユーザインタフェーススタイラで作成したダイアログで キャンセルボタン 後に デストラクタ が呼び出されて UF_STYLER_create_dialog の UF_UI_CANCEL と成り ufusr_ask_unload が呼び出されました。
Openユーザインタフェーススタイラで作成したダイアログで 閉じるボタン で キャンセル が呼び出されました。
UF_STYLER_create_dialog の次の行のコードは,ダイアログを閉じた後に実行される様です。
UF_STYLER_create_dialog を UF_UI_CB_EXIT_DIALOG で閉じると デストラクタ が呼び出されて UF_STYLER_create_dialog の UF_UI_CB_TERMINATE と成り ufusr_ask_unload が呼び出されました。
戻るボタン や キャンセルボタン や オブジェクトの選択 等は UF_STYLER_create_dialog から取得出来ました。
OKボタンのコールバックを追加すると ufusr 内の UF_STYLER_create_dialog 後の UF_DISP_set_highlight や UF_UI_set_status がエラーと成りました。
UF_STYLER_set_value で OKボタン を value.integer=FALSE で非表示には出来ませんでした。
コールバック関数内では UF_STYLER_set_value は即座に有効に成りました。
コンストラクタ 以外の UF_STYLER_set_value はダイアログを閉じて,ダイアログを再表示した時は UF_STYLER_set_value の変更が反映されませんでした。コンストラクタ 以外の UF_STYLER_set_value を コンストラクタ にも追加しました。
UF_UI_set_status の状態行にメッセージを表示は UF_STYLER_create_dialog 前や コンストラクタ での使用では表示が維持されませんでした。ダイアログタイトル で対処しました。
UF_UI_mask_t の UF_edge_type ではエッジは選択出来ませんでした。UF_solid_type,0,UF_UI_SEL_FEATURE_ANY_EDGE としました。
UF_UI_set_sel_procs(data.value.selection,filter_cb,sel_cb,NULL) の filter_cb は選択位置での指定した選択可能なオブジェクトの数だけ呼び出され,既に選択されているオブジェクトに対しては UF_UI_SEL_REJECT としました。
UF_UI_set_sel_procs(data.value.selection,filter_cb,sel_cb,NULL) の sel_cb で return UF_UI_CB_CONTINUE_DIALOG; とすると UF_STYLER_create_dialog は何の応答も返さず,何も変化しませんでした。sel_cb はオブジェクトの選択や選択解除する度に呼び出される様です。
UF_UI_set_sel_procs(data.value.selection,filter_cb,sel_cb,NULL) の sel_cb(int num_sel,tag_p_t sel_objs,int num_del,tag_p_t del_objs,void *user_data,UF_UI_selection_p_t select) の num_sel は選択したオブジェクトの数で num_del は選択解除したオブジェクトの数で select は合計の選択したオブジェクトの数等が分かる様です。
UF_UI_set_sel_mask の UF_UI_SEL_MASK_ENABLE_ALL は UF_UI_mask_t が無視されてエッジとフェース以外のすべてのオブジェクトが選択出来る様です。UF_UI_SEL_MASK_ENABLE_SPECIFIC は UF_UI_SEL_MASK_ENABLE_ALL と UF_UI_mask_t のオブジェクトが選択出来る様です。UF_UI_SEL_MASK_DISABLE_SPECIFIC は UF_UI_SEL_MASK_ENABLE_ALL から UF_UI_mask_t を除いたオブジェクトが選択出来る様です。UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC は UF_UI_mask_t のみのオブジェクトが選択出来る様です。UF_UI_SEL_MASK_ALL_AND_DISABLE_SPECIFIC は UF_UI_SEL_MASK_ENABLE_ALL からUF_UI_mask_t を除いたオブジェクトが選択出来る様です。UF_UI_SEL_MASK_DISABLE_SPECIFIC と UF_UI_SEL_MASK_ALL_AND_DISABLE_SPECIFIC の違いが分かりませんでした。
ufusr_ask_unload では UF_DISP_set_highlight(object,0); でオブジェクトのハイライトを解除出来ませんでした。
UF_DISP_display_temporary_line(NULL_TAG,UF_DISP_USE_ACTIVE_PLUS,point_first,point_second,&attrib) の UF_DISP_USE_ACTIVE_PLUS ですべてのレイアウトで一時直線が表示されました。
UF_DISP_display_temporary_line の UF_OBJ_disp_props_t attrib={0,UF_OBJ_WHITE,UF_OBJ_NOT_BLANKED,UF_OBJ_WIDTH_NORMAL,UF_OBJ_FONT_SOLID,TRUE}; で TRUE は無効で白の一時直線が表示されました。
UF_UNDO_undo_to_mark(mark_id, NULL) は mark_id までアンドゥされました。
点作成前の UF_UNDO_set_mark(UF_UNDO_invisible,NULL,&mark_id) ではアンドゥリストに追加されませんでした。UF_UNDO_visible でアンドゥリストに追加されました。
ソリッドボディを選択して UF_UNDO_set_mark(UF_UNDO_visible,"距離解析",&mark_id) 後に点を作成して,アンドゥすると NX Open (距離解析)でソリッドボディ(選択した)が選択出来ませんでした。ufusr 内のダイアログ表示前に UF_UNDO_set_mark とすると,アンドゥ後にNX Open (距離解析)でソリッドボディ(選択した)が選択出来ました。
UF_UNDO_set_mark の UF_UNDO_any_vis はエラーと成りました。
UF_MODL_ask_minimum_dist_2 では座標系やグループや製図要素はエラーと成りました。NX2とNNX3ではGRIPと同じでデータム軸もエラーと成りました。
UF_UI_point_construct では表示されるダイアログを 作業座標系 にしても,取得できる点は絶対座標系の値でした。
sprintf_s(msg,"3-D距離\t= %15.9f\n",min_dist); の 15 は小数点以下文字も含めた総文字数で 9 は小数点以下文字数でした。
Openユーザインタフェーススタイラで作成したダイアログを MenuScriptファイル を使用して メインメニューバー に登録した場合の ufsta (char *param,int *retcode,int rlen) では,uc1601 のメッセージは表示されませんでした。UF_UI_set_status でUG起動時に状態行にメッセージが一瞬表示されましたが,UG起動時の状態行のメッセージに変わってしまいました。UF_UI_write_listing_window によりUG起動時に 情報ウィンドウ にメッセージを表示する事は出来ました。
UF_PART_ask_display_part() を UF_initialize() の前にすると UF_PART_ask_display_part() はパートファイルを開いていても NULL_TAG と成りました。
プロジェクトを選択して,既存の項目 でユーザインタフェーススタイラで作成されたヘッダーファイルを追加しました。
UGヘルプの Openユーザインタフェーススタイラダイアログの作成と起動 を参照。
#ifdef MENUBAR_COMMENTED_OUT と #endif /*MENUBAR_COMMENTED_OUT*/ の行を削除。
#include "ヘッダーファイル名.h" と記述しました。#include <ヘッダーファイル名.h> では,fatal error C1083: include ファイルを開けません。 と成りました。
static int report_error で sprintf_s(msg, "*** ERROR code %d at line %d in %s:\n+++ ", irc, line, file); としました。 sprintf では,warning C4996: 'sprintf' と成りました。
uf_drf_types.h:warningC4819:ファイルは、現在のコード ページ(932)で表示できない文字を含んでいます。は,メモ帳表示で,uf_drf_types.h ファイルの2318行目の 斗 と ・ と2320行目の 都 と ・ を削除で出なく成りました。文字セット⇒設定なし にしても同じ警告が出ました。
UF_UI_set_status("") では状態行をクリア出来ませんでした。UF_UI_set_status(" ") としました。
絶対座標系の円中心は UF_MTX3_vec_multiply_t(円中心,円マトリクス,絶対座標系の円中心); で取得出来ました。UF_MTX3_multiply では絶対座標系の円中心と成らない時が有りました。
UF_OBJ_is_displayable では表示されていないオブジェクトも表示されていると取得出来てしまいました。
uc1616 で選択オブジェクトを選択するとオブジェクトのハイライトが解除されるが,選択オブジェクトとしては含まれている様です。
UF_DISP_set_highlight(object,1) は単にハイライトしているだけで選択状態とはみなされない為に,ハイライト状態で オブジェクトの表示 をしてもオブジェクトの選択に成ってしまう為に,ハイライト状態では オブジェクト表示の編集 ダイアログとは成りませんでした。
選択が有効なダイアログを閉じた跡に UF_UI_add_to_sel_list しても,ハイライトはしているが UF_DISP_set_highlight(object,1) と同じでした。
Openユーザインタフェーススタイラのビットマップは UGALLIANCE\vendor\application フォルダ等のUGでの検索オーダに有るフォルダに有るファイルで有れば,フォルダを指定せずにビットマップファイルのファイル名の指定だけで受け付けました。
Openユーザインタフェーススタイラのツールパレットの様な複数のボタンにビットマップを指定する時は,ビットマップファイルの拡張子なしのファイル名を一行毎に記述して,ボタン数の行数のファイルを拡張子を ubm として保存して,拡張子が ubm のファイルをビットマップとして指定出来ました。
UF_UNDO_undo_to_last_mark はアンドゥリストの最後のアンドゥが実行されましたが,アンドゥリストまでは削除されない様なので UF_UNDO_delete_mark でアンドゥリストを削除しました。
NX2では UF_UI_mask_t を {UF_route_segment_type,0,0} として UF_UI_set_sel_mask を UF_UI_SEL_MASK_ALL_AND_DISABLE_SPECIFIC としてもクラス選択ツールのフィルタ方法のタイプにルーティングオブジェクトのセグメントが表示されました。
NX2では UF_UI_mask_t を {UF_dimension_type,0,0} として UF_UI_set_sel_mask を UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC とすると UF_UI_set_sel_mask がエラーと成りました。
NX2では UF_UI_mask_t を {UF_drafting_entity_type,0,0} として UF_UI_set_sel_mask を UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC とするとクラス選択ツールのフィルタ方法のタイプが寸法の線形と成りました。
ユーザ定義寸法は UF_UI_mask_t を {UF_drafting_entity_type,UF_draft_assorted_parts_subtype,0} で制限出来ました。
UF_OBJ_cycle_objs_in_part でオブジェクトのタイプを UF_font_table_type でフォントテーブルオブジェクトを取得して,取得したフォントテーブルオブジェクトを UF_OBJ_delete_object すると2回目のDLLの実行でエラーと成りました。
ユーザ定義寸法の UF_DRF_set_object_preferences はエラーと成りました。
UF_UGFONT_ask_font_name は UF_UGFONT_ask_number_of_fonts のフォント番号を超えるとエラーと成る様です。
UF_UGFONT_ask_font_name のフォント番号は 1 からで UF_UGFONT_ask_number_of_fonts のフォント番号に行く前にメモリアクセス違反と成り,私ではフォントテーブルのリストを作成出来ませんでした。リストからフォント名の検索を断念して,UF_UGFONT_add_font で追加しました。
uc5566 の注記の編集は配列の数-1の改行が入りました。配列の値毎の行と成りました。{abc,def,ghi} の配列は abc↓def↓ghi と表示されました。↓は改行。
UF_DRF_add_assortpart_to_ann(annotation,number,list); は annotation で持たない設定はパートファイルの設定に list が変わりました。annotation が注記で list がユーザ定義寸法で,寸法線の色や矢印等が変わり,オブジェクトのタイプは注記でした。annotation がユーザ定義寸法で list の注記は何も変わらない様に思えます。
UF_DRF_create_assortpart_aid や UF_DRF_create_assortpart_dim で追加されたユーザ定義寸法の寸法補助線や矢印線や矢印頭部は寸法文字色に成り,文字は一般文字色と成りました。
UF_DRF_add_assortpart_to_ann(annotation,number,list); の annotation が注記で list がユーザ定義寸法は,寸法補助線と矢印線は最初の矢印線の色に成り,矢印頭部は最初の矢印頭部の色に成りました。
UF_DRF_add_assortpart_to_ann(annotation,number,list); の annotation が注記で list がユーザ定義寸法で作成された注記のスタイルを編集すると,寸法補助線や矢印線や矢印頭部が表示されなく成りました。
UF_DRF_ask_object_preferences のユーザ定義寸法の色は 追加テキスト しか正しく取得出来ませんでした。UF_OBJ_ask_display_properties で取得しました。
UF_DRF_get_text_substring(segment,data,&instance,&type,&number,&substring,&position,characteristic) のユーザ定義寸法は instance を 1 以上にするとメモリアクセス違反と成りました。substring は (null) と表示され,characteristic は character size (文字サイズ)と text angle (記入角度,ラジアン)しか正しく取得出来ませんでした。
part=UF_ASSEM_ask_work_part(); で UF_OBJ_cycle_objs_in_part(part,UF_line_type,&object) はパートを保存後に削除したオブジェクトは取得出来ませんでした。ブランクや不可視のレイヤのオブジェクトは取得出来ました。
UF_DRF_create_assortpart_aid は要素タイプが25でサブタイプが7で UF_DRF_create_assortpart_dim は要素タイプが26でサブタイプが15でした。
UF_call_grip はフルパスのGRIPファイル以外はエラーと成りました。GRIPファイルをパスの通ったフォルダに入れてもエラーと成りました。UGII_INITIAL_GRIP_DIR が必要の様です。UF_translate_variable を使用しないと環境変数も使用出来ない様です。
UF_call_grip は UF_TYPE_TAG_T_ARRAY でオブジェクトを配列でGRIPに渡せませんでした。UF_TYPE_TAG_T を使用しました。
UF_VIEW_cycle_objects は製図サブ要素は取得出来ませんでした。
UF_CURVE_OFFSET_DISTANCE_FILLET では UF_CURVE_create_offset_object はエラーに成りました。
UF_CURVE_offset_data_t の approximation_tolerance はゼロで,string_tolerance は0.001でした。
スプラインで,UF_CURVE_offset_data_t の approximation_tolerance がゼロでは,エラーに成りました。
UF_CURVE_offset_data_t の approximation_tolerance が近似許容値の様です。
UF_CURVE_offset_data_t の string_tolerance は,値を設定しても UF_CURVE_ask_offset_parms で調べる限りでは,0.001以外には成りませんでした。
UF_CURVE_OFFSET_DISTANCE_NO_TRIM は distance_type1 の rough_type が1では,[ラフオフセット]で[トリム]が[フィレット]と同じに成り,distance_type2 の rough_type が1では,[トリム]が[なし]と同じに成りました。
UF_CURVE_OFFSET_DISTANCE_FILLET は distance_type1 の rough_type が1では,[ラフオフセット]で[トリム]が[フィレット]と同じに成り,distance_type2 の rough_type が1では,[トリム]が[フィレット]と同じに成りました。
UF_CURVE_OFFSET_DISTANCE_TANGENT は distance_type1 の rough_type が1では,[ラフオフセット]で[延長率]が不明な[トリム]が[接線の拡張]と同じに成り,distance_type2 の rough_type が1では,[延長率]に影響されない形状に成りました。
UF_CURVE_OFFSET_DISTANCE_LIMITED_TANGENT は distance_type1 の rough_type が1では,[トリム]が[接線の拡張]と同じに成り,distance_type2 の rough_type が1では,[ラフオフセット]で[トリム]が[接線の拡張]と同じに成りました。
UF_CURVE_OFFSET_DISTANCE_NO_TRIM は distance_type1 も distance_type2 も rough_type が0では,[トリム]が[なし]と同じに成りました。
UF_CURVE_OFFSET_DISTANCE_FILLET は distance_type1 も distance_type2 も rough_type が0では,[トリム]が[フィレット]と同じに成りました。
UF_CURVE_OFFSET_DISTANCE_TANGENT は distance_type1 も distance_type2 も rough_type が0では,[延長率]に影響されない形状に成りました。
UF_CURVE_OFFSET_DISTANCE_LIMITED_TANGENT は distance_type1 の rough_type が0では,[延長率]が不明な[トリム]が[接線の拡張]と同じに成り,distance_type2 の rough_type が0では,[トリム]が[接線の拡張]と同じに成りました。
NX4 で DLL の使用
NX4 のメインメニューバー に登録したい場合は,NX4インストールフォルダ\UGALLIANCE\vendor\application に .dlg ファイルを,NX4インストールフォルダ\UGALLIANCE\\vendor\startup に .dll ファイルと .men ファイルを入れました。
MenuScriptファイル(.men)は VERSION 120 ↓ EDIT UG_GATEWAY_MAIN_MENUBAR ↓ MENU UG_INFO_ANALYSIS ↓ BUTTON MENU_BUTTON ↓ LABEL 表示名(日本語OK) ↓ ACTIONS ダイアログファイル ↓ END_OF_MENU ↓ で 解析 の一番下に表示されました。
VC2008
ヘルプの拡張子chmをhlpに変更は『ヘルプファイルではない』で開けませんでした。
アイコンはresフォルダの拡張子icoのファイルを置き換えで出来ました。
マニフェストを埋め込んだEXEがwin8.1で起動しました。
マニフェストを埋め込まず,マニフェストが無いと『mfc90u.dllが無い』のエラーで,EXEフォルダにDLLは互換が働きましたが起動せず,EXEフォルダにマニフェストでも起動しないのでマニフェストを埋め込みとしました。
stdafx.hファイルのafxext.hのみでモードレスダイアログは起動しました。afxcontrolbars.hをコメントで3つのエラーはCWinAppExをCWinAppに変更でエラーは出なく成りました。
64ビットプラットフォームは[プロジェクト]⇒[プロパティ]⇒[構成マネージャ]で[アクティブソリューションプラットフォーム]⇒[新規作成]で[新しいプラットフォームを入力または選択してください]⇒[x64]の様です。
[MFCアプリケーションウィザード]で[ユーザーインターフェイスの機能]の[最小化ボタン]をチェックは[前へ]でチェックが外れました。
hlpフォルダのhhpファイルを#Contents fileで[目次]タブが表示されなく成り,#Index fileで[キーワード]タブが表示されなく成り,#Full-text searchで[検索]タブが表示されなく成り,#Contents fileと#Index fileと#Full-text searchでタブとアイコンが表示されなく成り,タブとアイコンのスペースが無く成りました。
HTML Help Workshopはメニューを日本語できず,使い方も分かりませんでした。
hlpフォルダのhhpファイルのTitleはContents fileかIndex fileかFull-text searchが無いとヘルプとしか表示されない。
hlpフォルダのHIDD_ROOT_DIALOG.htmファイルの<style type="text/css"></style>にはP{}が必要で,.N{letter-spacing:0.5px;line-height:170%}を一般文字として,<P><span class="N"></span></P>で折り返しの行間隔も調整できました。
hlpフォルダのHIDD_ROOT_DIALOG.htmファイルの<style type="text/css"></style>のP{}を継承しず.N{}は全てを記述しました。
ダイアログのヘッダーファイルのafxwin.hをコメントにしても起動しました。
独自クラスにCStringの変数は独自クラスをデストラクタでエラーと成るので処理が遅いとは思いますがCStringArrayにしました。
[MFCアプリケーションウィザード]⇒[アプリケーションの種類]⇒[Unicodeライブラリを使用する]がチェックは文字に_Tが必要なので未チェックにしました。
64ビットプラットフォームはhlpフォルダのhhpファイルのContents fileかIndex fileが無いと『ヘルプの起動に失敗しました』に成りました。32ビットプラットフォームで作成したヘルプを64ビットプラットフォームで表示できました。
MoveWindowはOnInitDialog前だとエラーと成る様です。
ダイアログのプロパティのApplication WindowをTrueでタスクバーにアイコンが表示されました。
MoveWindow後にInvalidateRect(NULL,true)で残像が解消されました。
水平スクロールバーのノブの表示はSetHorizontalExtentが必要でした。
モードレスダイアログのCreateの親ウィンドウのポインタをGetDesktopWindow()とすると親がアクティブでモードレスダイアログが後に成りました。親を閉じるとモードレスダイアログも閉じました。
WM_GETFONTが発生しないとGetFontは正しく無いのでSelectObjectが必要の様です。
GetFileAttributesにファイルでFILE_ATTRIBUTE_DIRECTORYやFILE_ATTRIBUTE_NORMALは取れずFILE_ATTRIBUTE_ARCHIVEで取れてGetFileAttributesにフォルダでFILE_ATTRIBUTE_ARCHIVEは取れずFILE_ATTRIBUTE_DIRECTORYで取れてファイルかフォルダか不明はGetFileAttributes!=-1にしました。
プロジェクト名の先頭を数字にするとダイアログのソースファイルやヘルプファイルに My が付く。
GetProfileInt と GetProfileString では取得できないので GetPrivateProfileInt と GetPrivateProfileString を使用しました。
OnCancel はクラスに[追加]⇒[関数の追加]で出来て[閉じるボタン]や[ESCキー]や[コントロールメニュー]⇒[閉じる]や IDCANCELボタンを取得できましたが,正式には[クラス]⇒[プロパティ]⇒[オーバーライド]でした。
CFileDialog で複数選択の m_ofn.lpstrFile に char l_cha[999999] はエラーなので 4096単位で Win7 は char l_cha[974848] にしましたが Win8.1 は char l_cha[966656] にしました。
strcpy(char,CString) は警告なので strcpy_s(char,CString) を使用しました。
strcat は警告なので strcat_s を使用しました。
ShellExecute は操作のパラメータの lpParameters を NULL は拡張子に対応するプログラムが無いと VC6 の WinXP は 32 以下の値に成り,32 以下は操作対象のファイルの lpFile にプログラム, lpParameters にファイルとしましたが VC2008 の Win7 で lpParameters を NULL は 42 でプログラムの選択に成りました。
必要ソースはプロジェクト名フォルダ下のプロジェクト名フォルダ内のファイルと slnファイルと hlpフォルダと resフォルダでした。ncbファイルは不要でした。

ちょこっとNX4ジャーナル

& vbcrlf & での改行は有効の様です。
dim a as integer, b as double の様に変数宣言のみ ,(カンマ)で複数指定出来ました。
c(a*b) の様に式により配列の添え字に出来ました。
sel_obj as nxobject() で sel_obj(0) が使用出来ました。
deleteobject で削除した要素は is nothing で取得出来ませんでした。
グローバル変数は sub や function の外の module の次ぐらいのに private 変数名 as データ型 で使用出来ました。
nxopen.uf(ユーザーファンクション)を使用する時は uf.ufsession.getufsession() でユーザーファンクションのセッションを取得が必要の様です。
messagebox.show では日本語が文字化けしました。Microsoft .NET Framework Version 1.1 日本語 Language Pack をインストールしましたが文字化けは変わりませんでした。ソースファイル(.vb)をUnicodeに変更で正しく表示されました。
main では No main found のエラーに成り実行されない。他は小文字でも実行出来ました。
string.format で double を {0:d} ではエラーに成りました。
string.format で {d} ではエラーに成りました。必ず要素の整数が必要の様です。
listingwindow.writeline では vbcrlf は使用出来ませんでした。listingwindow.writeline("") としました。vbcrlf は使えました。
imports system としていても コンテナ等の名前空間の componentmodel は system.componentmodel としないとエラーに成りました。
作成したダイアログを表示させると,作業進行中のダイアログが表示され,作成したダイアログが非アクティブと成り,Enterキーを押すと,ジャーナル終了後にエラーが表示される。deactivate 内での1度の activate では,故意の非アクティブからアクティブ後に,作成したダイアログは非アクティブの為に使用出来ませんでした。故意の非アクティブが出来無く成る為に,全ての deactivate に activate とは出来ません。paint 内での topmost は再描画が行われない為に使用出来ません。作業進行中のダイアログが表示される限りは,対処は無いと思われます。
作成したダイアログを me.showintaskbar = false でタスク バーに非表示にすると,作業進行中のダイアログが表示されるまで待って,ジャーナルを終了して,2回目のジャーナルの起動で そのクラスは既に有ります のダイアログが表示され,ジャーナルが実行出来ません。private class とすると実行出来る回数が少し増えますが。
作成したダイアログにマウスの中央ボタンの対応と思いましたが,mousedown では,作成したダイアログ上をクリックしないと受け付けないのと,ラベル等のコントロールの無い位置をクリックしないと受け付けないので諦めました。コントロールにマウスの中央ボタンを対応させれば,コントロールの無い位置で無くても,受け付ける様には成ると思いますが。
作成したダイアログの onvalidating や validating は呼び出されず,入力値のチェックには使えませんでした。
NXOpen.UF の UFConstants に Open C API の定数が有りました。
ui.displaynonmodalmsg はダイアログを表示した操作の出来るモードレスダイアログでした。
ui.messagedialog は日本語がエラーに成り,使用出来ませんでした。translate を true すると英語でもエラーに成りました。
ui.pointconstruct を単独で使用するとダイアログエリア2のエラーと成る為に ui.lockugaccess と ui.unlockugaccess を使用する。
ゲートウェイでオブジェクトを選択して selectionmanager.getnumselectedobjects() で選択数が取得出来ました。
radiobutton を groupbox で Controls.Add すれば,radiobutton の me.controls.add は不要でした。
groupbox を visible = false で非表示にすると,groupbox に含まれる radiobutton も非表示に成りました。
radiobutton を checked = true に設定して,4回程実行すると,「そのクラスは既にあります」のエラーに成りました。変数.checked = true を public sub new 内に含める事で回避できました。checkbox は回避できましたが radiobutton はエラーでした。combobox を使用しました。
radiobutton をボタンは appearance = appearance.button で,ボタン時の文字配置の中段中央は textalign = system.drawing.contentalignment.middlecenter でした。
groupbox 内のコントロールの location = new drawing.point は groupbox が基準でした。
textbox の select を設定して,4回程実行すると,「そのクラスは既にあります」のエラーに成りました。
textbox で背景を透明の様には,backcolor = me.backcolor としました。
label は tabstop = true にしても,Tabキーでフォーカスを移動出来ませんでした。
for each dis_obj as displayableobject in で,オブジェクトが nothing の時に if dis_obj.tag <> tag.null then は,「オブジェクト参照がオブジェクト インスタンスに設定されていません」と nothing の為?のエラーに成りました。
for each dis_obj as displayableobject in で,オブジェクトの初期値を nothing に設定出来れば if not dis_obj is nothing then が使用出来ました。
ui.selectwithsingledialog は多分,初期化に失敗とのエラーの為に使用出来ませんでした。ui.selectwithclassdialog は,dim 変数 as uf.ufui.selinitfnt = addressof 関数名 を設定する事により,使用出来ました。
キーコードを送る sendkeys.sendwait("{esc}") は,セキュリティポリシーで非許可の為に使用出来ませんでした。
postmessagea では,「エントリ ポイントが見つかりません」で,使用出来ませんでした。PostMessageA でエラーは出なく成りました。
private declare function PostMessageA と private declare function PostMessageW は,private declare auto function PostMessage で,勝手に判別するかも。
ui.getdefaultparent() にて,NXのウィンドウハンドルを取得して,EnumChildWindows では,selectionmanager.selectobject の単一のオブジェクトのダイアログが含まれていませんでした。EnumWindows の使用しました。
diagnostics.process.getprocesses() では,selectionmanager.selectobject の単一のオブジェクトのダイアログが含まれていませんでした。
selectionmanager.selectobject の単一のオブジェクトのダイアログを実行する度に,キャンセルボタンのウィンドウハンドルがが変わりました。FindWindowEx で取得しました。
変数名.show のコントロールを friend withevents コントロール変数名 as label とすると,コントロール変数名で取得出来ました。
フォーム変数名.show のコントロールを friend withevents コントロール変数名 as label として,フォーム変数名.コントロール変数名.onclick は,protected のエラーで使用出来ませんでした。
Visual Studio 2008 付属の Spy++ でウィンドウの親子関係やウィンドウハンドルやコントロールIDを調べました。
ジャーナル内で宣言したフォーム内のコントロールIDは実行毎に変わりました。
ui.pointconstruct の 変数名 as tag は,so.setvisibilityoption(poi_tag, uf.ufso.visibilityoption.visible) で表示されましが,点オブジェクトでした。
abs 等の数値関数は system.math に有りました。
disp.displaytemporarypoint のオブジェクトの変数が,nothing の時に,オブジェクトの変数名.tag はエラーに成りました。tag の変数を作成して,not オブジェクトの変数名 is nothing の時に,tag の変数に,オブジェクトの変数名.tag を代入しました。
0.000000003 の直線は作成出来ました。
string の format では,f の 標準の数値書式指定文字列 と ; の カスタム数値書式指定文字列 の併用は出来ない様です。
末尾ゼロ抑止の為に,string で,dim c_cha as char() = {"0"c, "."c} として,trimend(c_cha) では,70.0 が 7 と成りました。trimend("0"c) と trimend("."c) に分けました。
showdialog で,OK やキャンセル以外でも,フォームを閉じるボタンは,dialogresult を設定しないと閉じませんでした。
showdialog のモーダルダイアログ内から,selectionmanager.selectobject の単一要素選択は,オブジェクトが選択出来ない為に使用出来ませんでした。モーダルなので,グラフィックウィンドウにアクセス出来ない為と思われます。
dim 変数A() as double = 変数 で,変数A を変えて複数作成して,最後に計算した値の,全ての複数作成した変数が,同じ値に成りました。代入は,for を使用して,宣言と代入を分離しました。clone は,option strict on では,使用出来ませんでした。
直接オブジェクトの color や linefont や linewidth を変更しても反映されませんでした。displaymanager.newdisplaymodification を使用しました。layer は直接変更が有効の様です。
private sub 関数(配列変数B() as double) の関数を,関数(配列変数A) で呼び出して,配列を引数で渡せますが,配列変数B の値を変えると,配列変数A の値も変わりました。
ctype(the_ses.parts.work.findobject("NXMATRIX WCS"), nxmatrix) で,作業座標系のマトリックスを取得出来ました。ctype(the_ses.parts.work.findobject("nxmatrix wcs"), nxmatrix) では,取得出来ませんでした。
型変換演算には,ctype と directcast と trycast が有り,directcast は,処理速度が速いですが,エラー処理が必要で,trycast は,型変換失敗時に,nothing を返します。ctype と cint は,処理速度は変わらない様ですが,directcast では,1.1等の小数点以下が有り,切捨て等が起きる型変換では,エラー処理が必要の様です。
作成オブジェクトの削除を undolastnvisiblemarks(1, 変数A, 変数B) のアンドゥの実行により,可能かと思いましたが,オブジェクトの作成後に,setundomark で,アンドゥを設定している為に,オブジェクトの作成後がアンドゥされるだけで,オブジェクトの削除とは成りませんでした。undolastnvisiblemarks(2, 変数A, 変数B) で,可能かもしれませんが,確実性の不安の為に,使用しませんでした。
tag では,tag.null や nothing で,空要素のチェックが出来ない為に,utilities.nxobjectmanager.get で,tag から taggedobject に型変換により,is nothing での,比較が出来る様に成りました。
annotations.note を,ビュー依存に変更の view.converttoview(ビュー変数, 要素変数.tag) では,エラーに成りました。if 変数.gettype.tostring <> "NXOpen.Annotations.Note" then で,振り分けました。
nxinputbox は,windows.forms と同じ様で,作業進行中ダイアログにアクティブを奪われ,直ぐに,nxinputbox に,記入出来ない。
変数が objectlist で,変数.vector.length で,オブジェクトの数が取得や,変数がレイヤで,parts.work.layers.getallobjectsonlayer(変数).length で,レイヤ内のオブジェクトの数が取得出来ました。変数A = セッション変数.parts.work.layers.getallobjectsonlayer(レイヤ変数) と,オブジェクトを取得して,変数A.length と,オブジェクトの数を取得した時の,処理速度に違いは無い様です。
カテゴリの layer.category を,updatemanager.addtodeletelist で削除出来ました。for で,変数.name <> "ALL" で,ALLカテゴリ以外を,updatemanager.addtodeletelist(変数) で,一つづつ追加して,next 後に,updatemanager.doupdate で,全てのカテゴリを削除出来ました。
dim 変数A() as integer = 配列 で,redim 変数A(変数B) の,添字の変数B で,動的配列の配列数(要素数)を設定出来ました。配列数を変更したい時にも,redim の使用ですが,内容(変数内の値)がクリアされる様です。内容を保持したい時は,redim preserve 変数A(変数C) で,配列数を増やす事が出来ました。
io.path.getfilename(作業パートファイル.fullpath) で,拡張子付きのファイル名が取得出来ました。
sub や function に含まれない module 直下のグローバル変数として,private 変数名 as session = session.getsession で,取得出来ました。
showdialog で表示した form の button で,イベントを定義すると,戻り値の dialogresult を,None 以外に設定しても,form は閉じませんでした。イベント内で,me.close としました。
配列で button を作成した時に,for 内でも,イベント内でも,dialogresult は,使用出来ました。
categorycollection の パート変数.layercategories.findobject("カテゴリ名") や,layercategories.createcategory は,作業や表示パート以外では,エラーに成る様です。
setwork(part変数) は,エラーに成りましたが,setdisplay(part変数, false, false, 変数A) で,表示パートを切り替えて,開いている別パートファイルの編集は出来ましたが,パートを切り替えると,アンドゥが消去されました。
カテゴリの setmemberlayers は,同じレイヤ(重複)が複数含まれていても,使用出来ました。
点とソリッドボディとシートボディは,ビュー従属オブジェクト(ビュー依存)に変更の view.converttoview で,エラーに成りました。平面や,データム軸や,データム平面は,ビュー従属オブジェクトに出来ました。
ufview の view.converttomodel は,モデルオブジェクト(モデル依存)と累進寸法と寸法に関連付けしているオブジェクトは,エラーに成りました。try catch end try での対応しか分かりませんでした。
selectionmanager.selectobjects で,subtype = uf.ufconstants.uf_dim_horizontal_subtype とすると,クラス選択ツールの寸法の詳細が線形と成り,水平寸法,垂直寸法,平行寸法,直交寸法,円筒寸法,面取り寸法が,選択出来ました。
selectionmanager.selectobjects で,subtype = uf.ufconstants.uf_dim_radius_subtype とすると,クラス選択ツールの寸法の詳細が円形と成り,半径寸法,直径寸法,穴寸法,円弧長寸法が,選択出来ました。
描画の更新停止は,disp.setdisplay(uf.ufconstants.uf_disp_suppress_display) で出来て,setdisplay(uf.ufconstants.uf_disp_unsuppress_display) で,描画が更新されました。描画が更新では,disp.regeneratedisplay の使用と書いて有りましたが,表示の全消去と思われる点滅が有る為に無視しました。
ui.setprompt で,指針行を設定出来ました。form で作成したダイアログでは,オブジェクト選択が指針行に表示されたままなので,ui.setprompt("") で,指針行の内容を消しました。
レイヤ内のオブジェクトを parts.work.layers.getallobjectsonlayer で,取得すると,エッジ等が含まれる為か,取得したオブジェクト全てを,parts.work.layers.moveobjects で,レイヤ移動するとエラーに成りました。オブジェクト一つづつをレイヤ移動し,try catch で括り,エラーを無視しました。
X方向の累進寸法の tostring は,HorizontalOrdinateDimension と表示され,subtype は,13 と表示され,uf.ufconstants.uf_dim_ordinate_horiz_subtype と思われます。Y方向の累進寸法の tostring は,VerticalOrdinateDimension と表示され,subtype は,14 と表示され,uf.ufconstants.uf_dim_ordinate_vert_subtype と思われます。
displayableobject 変数.tag = nxobject 変数.tag は,tag が読み取り専用の為に,値設定が出来ないのでエラーに成りました。directcast で型変換しました。
parts.work.planes.createplane は,vector3d に対して面直に作成される為に,直線を基にする時は,90度回転する必要が有りました。
arcオブジェクト = directcast(tagオブジェクト, arc) の型変換は,tag が値である為に,参照で無いとのエラーに成りました。utilities.nxobjectmanager.get と型変換の二段階にしました。
arcオブジェクト = directcast(円エッジ, arc) の型変換は,エラーに成りました。directcast(tag_obj, displayableobject) としました。
collections.arraylist は,オブジェクト型の為に,四則計算でも型変換が必要でした。arraylist変数A(添字A) = directcast(arraylist変数A(添字A), integer) + 1
計算式に割り算の / を含むと,結果が double と認識されてエラーに成り,integer に格納出来ませんでした。商の \ を使用しました。
情報ウィンドウは132文字を超えると,勝手に改行される様です。
{A, B} や {C, D, E} と,オブジェクトの数が不規則な配列を,collections.arraylist の入れ子構造(仮想2次元配列)で実現しました。変数A と 変数B の collections.arraylist で,変数A.add(A) と追加して,変数B.add(変数A) で追加しました。変更は,変数A = directcast(変数B(添字B), collections.arraylist) で取得して,変数A(添字A) = オブジェクトF で変更して,変数B(添字B) = 変数A で変更されました。
曲線の端点は,modl.askcurvepoints(要素変数.tag, 0, 0, 0, 数変数, 点変数) で取得出来ました。始点側Xは,点変数(0) 終点側Xは,点変数(数変数 * 3 - 3) でした。
eval.initialize(要素変数.tag, ポインタ変数) で,ポインタ変数を取得して,eval.asklimits(ポインタ変数, 範囲変数)で,始点と終点の範囲数値を取得して,曲線の端点は,eval.evaluate(eva_ptr, 0, 範囲変数(始点か終点の配列の添え字), 点変数, 方位変数) で取得出来ました。範囲数値は,0〜1 等の決まった値ではなく,要素により変わる為に,eval.evaluate で取得する必要がありました。
誤差が累積した為か,小数点以下10桁目に誤差が出ました。
180度逆向きの vec3.add や,同じ向きの vec3.sub や,同じ向きや180度逆向きの vec3.cros は,3つの全ての配列がゼロになりました。
eval.evaluateunitvectors で,binormal は,直交に見えましが,作業平面に並行では有りませんでした。X軸やY軸に平行な直線では,normal はZ軸に成りました。
point.createatintersectionoftwocurves は,オブジェクトは延長されず,オブジェクトの範囲に交差が無いとエラーに成る様です。curve1 と curve2 が共に直線の時は,help_point1 と help_point2 を共に nothing にしても,使用出来ました。curve.intersect で,交点を求めました。
最短距離測定の modl.askminimumdist2 の guess1_given や guess2_given を 1 として,対応する object1 や object2 を nothing として,対応する guess1 や guess2 に座標を指定しても min_dist が,間違った値に成りました。guess1 と guess2 は推測点の為と思われます。
二等分のベクトルは,vec3.add で取得出来ました。
交点の curve.intersect では,エラーと成らない時が有るので,ベクトルの時は,vec3.isparallel で,is_parallel がゼロ超過で平行としました。
form で,フォーム変数.show の時に,フォーム変数.プロパティ変数 = 文字 で,テキストボックスの表示を変更出来ました。private class フォーム名 に,public writeonly property プロパティ変数 as string 関連だけの追加でした。
selectwithsingledialog の uf.ufui.selinitfnt 内の ui.setselprocs の uf.ufui.selfilterfnt は,近くのオブジェクトも含まれる為に,選択したオブジェクトだけとは成りませんでした。点と直線が選択可能で,点を選択しても直線と成りました。
askarcdata の arc_center と,NXOpen.Arc の centerpoint の値が同じでは有りませんでした。centerpoint は,絶対座標系の値と思われるが,arc_center は,mtx3.vecmultiplyt で,絶対座標系のの値にする必要が有る為の違いと思われる。start_angle と startangle,end_angle と endangle は,同じでした。
parts.work.curves.createarc で,startangle をゼロに,endangle を -math.pi/2 では,反時計回りで,startangle がゼロで,endangle が 3*math.pi/2 で作成されました。
半径が 0.000000003 の円は作成出来ました。
eval.evaluateclosestpoint は,オブジェクトの範囲外は,始点か終点の値に成る様です。円弧は360度の円を作成して使用しました。
math.acos は,ゼロ度と180度で,NaN(非数値)と成りましたが,エラーには成りませんでした。斜辺長(半径)の半分で,math.asin と併用しました。
直線を端点と反対側と点として端点からのベクトルで決める時に,999999999 * ベクトル値 で,NXと同程度の精度に成りました。
parts.work.curves.createarc で,マイナスの radius はエラーに成りました。math.abs を使用しました。
関数の引数に配列を使用すると,関数との間で値の受け渡しが出来ますが,引数に point3d では,関数との間で値の受け渡しは出来ませんでした。関数の引数を配列にして,配列の値を point3d に入れました。
誤差の累積等の為か,double では,対象A が 比較B を超過かを調べたい時に,対象A > 比較B では正しく判断されず,(対象A - 比較B) > 誤差(0.00000001) としました。
二等分線は,二等分線の垂線が必要な時が有り,必要なのが二等分線か二等分垂線かを調べるのに,二等分線と点が基準線に対して同じ側に有る事を条件とて,ベクトルの方向で調べる時は,点を通る二等分線の垂線を使用しました。基準線の垂線では,正しく無い時が有りました。
FindWindow により,if not ハンドル変数.equals(intptr.zero) then exit sub で,二重起動の抑止と思いましたが,操作によりエラーは変わらず,諦めました。
点と直線と円に接する円は,円中心を通り,直線に垂直で描けるのですが,点が垂線上に有る時は,接する円の直径が,(全高^2-R^2-L^2)/(全高+R-L) と (全高^2-R^2-L^2)/(全高-R-L) でした。全高は,直線と円中心の距離,R は,円の半径,L は,直線と点の距離です。直線の垂線方向で,点を頂点とした接する円の径の円と,直線の交点が,接する円の接点と成り,その交点と直線の垂線と円の交点を繋いだ直線と円の交点が接する円の接点と成るので,2つの接点と点で,3点円が無難かな?。点が円に対して直線と反対側の時で,点と円中心の距離を Q とすると,((全高+Q)^2+R^2-全高^2)/(Q-R) と ((全高+Q)^2+R^2-全高^2)/(Q+R) でした。
[設定]⇒[選択]⇒[選択をプレビュー]のチェックは,ui.selectwithsingledialog が,エラーに成り易い様です。
class 内の Main は public shared sub Main としないと「非スタティック メソッドにはターゲットが必要」のエラーに成りました。
class を private にすると「別の型の内部になければなりません」のエラーに成り,class の外側に module を使用しました。
combobox で,入力不可の dropdownstyle = comboboxstyle.dropdownlist は,items.add で,リストに項目の追加してからでないと,text が表示されない。
ダイアログの class 内の Main で,ダイアログの class 外から,ダイアログ内のコントロール変数の使用は,ダイアログ作成の new を,ダイアログの class 外で宣言し,コントロール変数を public で参照できました。
parts.work.curves.createarc で,startangle と endangle を同じ値にするとエラーに成りましたが,parts.work.curves.createellipse ではエラーに成りませんでした。

ちょこっとNX8.5ジャーナル

GRIP の SOLCUT では円筒のシートボディで切断できませんでした。
Snap(Simple NX Application Programming) の実行ライセンスは NX SNAP Author でライセンスが無いとサンプルも実行できない。
NXOpen.UF.UFUi.DisplayMessage で『非共有メンバーを参照するにはオブジェクト参照が必要です』は uf_ses as UF.UFSession = UF.UFSession.GetUFSession で uf_ses.Ui.DisplayMessage でした。
Ui.PointConstruct では[戻る]ボタンも無く,設定した文字も[指針行]に表示されないので Ui.PointSubfunction を使用しました。
当然ですが同じオブジェクトで createplane を続けて行ってもエラーに成りませんでした。オブジェクト数は 1 でした。
SelectObjects や SelectTaggedObjects や SelectWithClassDialog に[戻る]ボタンが有りません。
SelectObjects と SelectTaggedObjects の違いは NXObject が TaggedObject だけでした。
a(0) = DirectCast(b(0), NXObject) と2つの引数が共に配列だと『オブジェクト参照がオブジェクトインスタンスに設定されていません』のエラーに成る様です。
TaggedObject の配列から NXObject の配列への型変換が分からないので SelectTaggedObjects と SplitBodyBuilder の使用は諦めました。a = DirectCast(b(0), NXObject) として NXObject の配列に a を入れても『オブジェクト参照がオブジェクトインスタンスに設定されていません』のエラーでした。Utilities.NXObjectManager.Get を使用しても同じエラーでした。空のフィーチャを宣言が必要?。
mas_tri() as UF.UFUi.Mask では『オブジェクト参照がオブジェクトインスタンスに設定されていません』のエラーに成りました。mas_tri(5) as UF.UFUi.Mask でエラーが出なく成りました。
SetSelProcs の第2引数の関数が選択したオブジェクト一つずつで呼び出され第3引数の関数が長方形選択やピック等の選択操作毎に呼び出される。
For Each DisplayableObject In NXObject と型変換が出来ました。
複数のオブジェクトで For する時に CreateSplitBodyBuilderUsingCollector を For の前では最初のオブジェクトしか分割されませんでした。
ツールを抽出の CreateExtractFaceBuilder でシートボディにしたつもりでしたが分割の Modl.SplitBody でエラーでした。ツールに Face でも Modl.SplitBody でエラーでした。
分割の CreateSplitBodyBuilderUsingCollector の GeometricUtilities.BooleanToolBuilder.BooleanToolType.FaceOrPlane でツールを削除すると分割が解除されるのでパラメータの除去の CreateRemoveParametersBuilder が必要でした。CreateSplitBodyBuilder もパラメータの除去が必要でした。
分割の CreateSplitBodyBuilderUsingCollector の GeometricUtilities.BooleanToolBuilder.BooleanToolType.NewPlane でターゲットをパラメータの除去の CreateRemoveParametersBuilder すると BooleanTool.FacePlaneTool.ToolPlane のオブジェクトが消失する様で For Each 内の BooleanTool.FacePlaneTool.ToolPlane や BooleanTool.FacePlaneTool.ToolPlane のオブジェクトの SetVisibility(SmartObject.VisibilityOption.Invisible) で『有効でないオブジェクトの使用を試みます』のエラーに成り BooleanTool.FacePlaneTool.ToolPlane のオブジェクトは Is Nothing で弾けませんでした。
直接は関係してない筈ですがパラメータの除去の CreateRemoveParametersBuilder の後の SetVisibility(SmartObject.VisibilityOption.Invisible) の後の SetVisibility(SmartObject.VisibilityOption.Invisible) のオブジェクトは Is Nothing で弾けませんでした。
分割の CreateSplitBodyBuilderUsingCollector の GeometricUtilities.BooleanToolBuilder.BooleanToolType.NewPlane でパラメータの除去の CreateRemoveParametersBuilder しないとターゲットの片側だけを削除する事が出来ないので新規に平面を作成する事にしました。
PlaneTypes.MethodType の FixedX と FixedY と FixedZ は XY平面に成り Matrix で思う平面に成りました。
Axis の Directions.CreateDirection で指定した点に成らず Point を設定しました。
Mtx3.VecMultiplyT で vec に座標系の値 mtx に座標系のマトリクスで vec_product に絶対座標系の値に成りました。作業座標系と絶対座標系の双方変換は Csys.MapPoint が簡単です。
Mtx3.VecMultiply で座標系の原点は絶対座標系の原点ですが vec に絶対座標系の値 mtx に座標系のマトリクスで vec_product に座標系の値に成りました。作業座標系と絶対座標系の双方変換は Csys.MapPoint が簡単です。
Parts.Work.Bodies の BodyCollection の ToArray でパートファイル内の全ボディが取得できたと思います。
円錐の Features.CreateConeBuilder でオフセットフェースの Features.CreateConeBuilder で頂点を超えるオフセット量でもエラーに成りませんでした。
円錐の Features.CreateConeBuilder の2つの同軸円弧の Features.ConeBuilder.Types.TwoCoaxialArcs で円弧の軸が一致しなくてもエラーに成らず円錐は BaseArc で作成されました。
Modl.AskFaceData の値は円錐の Features.CreateConeBuilder では Features.ConeBuilder.Types.BaseDiameterHeightAndHalfAngle でした。
Modl.AskFaceData の円筒と円錐はフェースの中間の値でした。
SelectTaggedObject の maskArray の Type が UF_view_type で Subtype が UF_view_section_subtype と UF_view_imported_subtype と UF_view_orthographic_subtype と UF_view_auxiliary_subtype と UF_view_detail_subtype で図面のビューが選択できました。
Drawings.DraftingView の Style.General.Scale で図面のビューのスケールが取得できました。View の Scale では不明な値でした。
DraftingNoteBuilder の Origin では Z が無視されて Z0 で作成されるので CreateNote を使用しました。
String の IndexOf で vbCrLf が使用できました。
String の IndexOf で "\" で検索できました。
ListBox の SetSelected は Items.Add 直後に使用できました。
ListBox の SelectionMode.MultiExtended は Ctrl キーで選択解除できるので SetSelected は意味が無いかも。
Show でモードレスダイアログを表示は初期化(コンストラクタ)に NXOpenUI.FormUtilities.ReparentForm(Me) でモードレスダイアログが NX の前に成りました。
DisplayManager.MakeUpToDate でモーダルダイアログの表示中にした DisplayTemporaryArc が表示されました。
Int64.TryParse はエラーで使用できず Int32.TryParse にしました。
Ui.DisplayMenu を表示中にモードレスダイアログで Ui.CreateFilebox は Ui.DisplayMenu が閉じるので System.Windows.Forms.OpenFileDialog を使用しました。
System.Windows.Forms.SaveFileDialog.CheckPathExists = true は警告を表示してファイルを指定できない。
System.Windows.Forms.SaveFileDialog で作成したフォルダは Dispose しても NX を終了するまで削除できませんでした。
System.IO.File.CreateText でも上書きされるので System.IO.FileStream を使用しました。System.IO.File.Open はエラーでした。
Try Catch は最初のエラーで Catch に成りました。
Show のモードレスダイアログは Tabキーで動きませんでした。Application.Run は3D入力デバイスで動きませんでした。
処理中の Label の再描画は Update で出来ました。
CAMSetup.CAMOperationCollection.FindObject は Not Is Nothing ではエラーが表示され Try と併用にしましたが Not と For の併用は For 内部で Try でした。
Clsf.Import は NX 起動後に一度でも製造にしてないとエラーに成るので Clsf.Import の前に Cam.InitSession はメモリエラーに成ったので Cam.IsSessionInitialized にしました。
CLSF の MSYS は 原点X,原点Y,原点Z,マトリクスXX,マトリクスYX,マトリクスZX,マトリクスXY,マトリクスYY,マトリクスZY でした。
CoordinateSystems.CreateCoordinateSystem の isTemporary は true で座標系オブジェクトは作成されませんでした。
CLSF の MSYS のマトリクスは Mtx3.Initialize と Mtx3.Transpose で出来ましたが Mtx3.Initialize のみと手間は変わらない?。
PrintBuilder は SourceBuilder.SelectedSheets と Copies が必要でした。
PrintBuilder は Paper を設定しないと Letter に成る様です。
PrintBuilder は Output とThinWidth を設定しないと白紙でした。
PrintBuilder で工具軌跡のツールパスを印刷するには Output を PrintBuilder.OutputOption.Shaded にする必要が有りました。
PrintBuilder で Output を PrintBuilder.OutputOption.Shaded にすると ThinWidth 等を変更しても印刷の線幅は変わらないので ThinWidth 等は設定しませんでした。
PrintBuilder で Output を PrintBuilder.OutputOption.Shaded にしても表示のままのワイヤフレームで印刷されました。
Features.CreateProjectCurveBuilder は CurveFitData.Tolerance が必要でした。
MeasureManager.CreateMeasureFaceBuilder では無く MeasureManager.NewFaceProperties を使用しました。
MeasureManager.NewFaceProperties は GetFaces で出来ました。
Features.CreateBoundedPlaneBuilder の前に Preferences.Modeling.DistanceToleranceData で出来ました。Commit の前の Preferences.Modeling.DistanceToleranceData では作成できませんでした。
NXException は Catch でしか宣言できませんでした。
ListingWindow は開いていても Open が必要でした。

ちょこっとNX9ジャーナル

引き出し線が複数の NXOpen.Annotations.Label の[保持された注釈]を解除には Origin.SetAssociativeOrigin が必要ですが Origin.GetAssociativeOrigin を使用すると[保持された注釈]を解除できません。AssociativeOriginData.OriginType が Annotations.AssociativeOriginType.RelativeToGeometry の為と思われます。Drf.SetAssociativeOrigin では[保持された注釈]を解除できません。Drf.AskAssociativeOrigin を使用しても[保持された注釈]の解除は出来ました。宣言のままの Annotations.Annotation.AssociativeOriginData を Origin.SetAssociativeOrigin に与えても変化が分かりませんでしたので Drf.AskAssociativeOrigin は使用していません。Origin.SetAssociativeOrigin の使用で NXOpen.Annotations.Label の[原点]の移動は Origin.Origin.SetValue で対処できたのも有りました。Origin.SetAssociativeOrigin の前に Origin.Origin.GetValue でした。
LinearDimensionBuilder の Commit で「ヌルタグは許可されていません」は InferSnapType.SnapType が Intersection の為に Associativity.SetValue に Nothing は無く,7つの全要素を設定する必要が有りました。
NXOpen.Annotations.Label の Annotations.LeaderData.Leader.SetValue の first selected object が Nothing でも[保持された注釈]が解除されました。
たぶん Eval.Initialize で曲線以外だとTry Catch してもダイアログが表示されるので先に DirectCast で Curve に変換エラーを検出させて Eval.Initialize を実行させない様にしました。
Features.CreateHelixBuilder の CoordinateSystem は Xform でないと設定できない様です。
Features.Feature を DisplayableObject に変換できないエラーの HelixBuilder は複数オブジェクト扱いなので色変更等は CommitFeature して GetEntities でオブジェクトを取得して DisplayableObject に型変換して設定しました。

ちょこっとNX10ジャーナル

SelectWithSingleDialog の object の Tag は Is Nothing はエラーで Tag = Nothing で出来ました。
Point3d や Vector3d は 変数名 = new Point3d(値, 値, 値) や 変数名 = New Vector3d(値, 値, 値) で設定できました。
Preferences.Modeling.SetHistoryMode 中で SplitBodyBuilder の Commit を Try Catch でエラー回避後の Preferences.Modeling.SetHistoryFreeMode で『内部エラー:無効なソリッドオブジェクトタグ』エラーなので SetHistoryMode を諦めて SetHistoryFreeMode にしました。

ちょこっともろもろ

unigraphics Ver14の問い合わせ 9,183バイト 整理していません。
unigraphics Ver15の問い合わせ 16,628バイト 整理していません。
unigraphics Ver16の問い合わせ 12,714バイト 整理していません。
unigraphics Ver17の問い合わせ 7,062バイト 整理していません。
unigraphics Ver18の問い合わせ 24,041バイト整理していません。
unigraphics NX1の問い合わせ 1,554バイト 整理していません。

これまで使用してきたCADCAMの問題点や制限を書いてみました。cad_cam.txt 11,266バイト 整理していません。

Parasolidファイルのバージョンが上位の為に読込めない時は,下記リンク(見つからないので削除)のTech Soft Americaの左のDOWNLOADSのParaHOOPS 3D Part Viewerをクリックして,表示されたページの,ParaHOOPS 3-D Part Viewerアイコンをクリックして,(以下は未確認)Email: Name: Company を入力して,Submitボタンをクリックするとメールがきます。メール内のParaHOOPS 3D Part Viewer(29.7MB)のURLからファイルをダウンロードして解凍,インストールします。
インストールしたフォルダの下にschemaフォルダがありますので,使用ソフト側(UG)のschemaフォルダに無いファイルをコピーすると上位バージョンのParasolidを読込めると思います。UGバージョン16のParasolidはバージョン11で,ParaHOOPS 3D Part Viewerバージョン5のParasolidはバージョン12ですから,sch_12006.sch_txt,sch_12102.sch_txt,sch_12103.sch_txtをコピーしますが,Parasolidのバージョン12で書き出せるソフトがあるでしょうか?。VISI-CAD/CAMとかSolidWorksが出せる様です。
Rapidform XOM
全てのパラソリッドの表示はグレーでした。
メッシュの為か,ビュークリップは断面で塞がれず,奥のフェースが見えました。
使用期限 1.0.0 2012年9月30日 1.0.1 2012年12月31日
Delcam Exchange 2013 32-bit
エクスポート(書き出し)は有料で,インポート等だけなら無料の様で,インストールだけで表示はされました。
64bit版で,プログラムの所持しているパスの不正からか,Parasolid と Unigraphics は開けないので, 32bit版を試しました。
[ファイル]→[開く]等の[参照]ボタンでファイルを選択後に,[リソース]ボタンで[標準]→[エンティティ変換]の[ソリッドをフェースへ展開]のチェックを外すと,ソリッドに成り,非表示等での選択が楽に成ると思います。[適用]ボタン後に[ファイル]→[保存]で,再起動後も変更が有効の様です。
測定や色の変更は無い様なので確認だけ?。
Delcam PowerSHAPE-e 2012 64-bit
パラソリッドのインポートに Exchange は不要?。
Exchange2013 のインストールは PowerSHAPE-e のインストールの前でも後でも Exchange2013 の32bit版でも64bit版でもインポートは出来ました。
全てのパラソリッドの表示は同じ色に成り,ソリッドの色の変更は分かりませんでした。[表示]→[シェーディング]→[ワイヤーフレーム配色を使用]がチェックされていると,エクスポート時のソリッドの色に成りました。パラソリッドでの[ワイヤーフレーム配色を使用]はエッジと同じ色の為に,凹凸が分かり難い。選択時の黄色や,ソリッド上での右クリックの[アクティブ]がチェックされた赤色のエッジで,ソリッドとの色の違いとする?。エッジとソリッドを違う色にしたい時は,[ワイヤーフレーム配色を使用]をチェックせず,ソリッドを選択して,上の Main toolbar の[アイテムの配色]でエッジの色を指定して,[フォーマット]→[マテリアル]でソリッドの色の指定で出来ました。
起動時の毎回のパスワードの入力が面倒?。
インポートの終了は,右下の砂時計が目安?。
ヘルプを見るには,ヘルプのインストールが必要。英語です。
ツールバーを一段にする事が出来ず,複数の段に成る?。
ソリッドのレベル(レイヤ)移動は,選択後に下の Status bar の現行レベル(Current Level)に移動したいレベルを入力で出来ました。
バージョンアップまでの使用期限?。

リンク
 使用しているフリーソフトのwebページ等です。
清水 洋平 シェアウェアですがSIIのポスト処理用に使用しているWinBatchEh等が有ります。
kxcad 英語ですが,CADのヘルプが見れるかも。
Unigraphics (UG)の使い方・操作方法
Parasolidを表示できる無料の PowerSHAPE-e や Exchange が有ります。
シーメンスのサポートページです。
NXやSolid Edgeが有ります。
NXやVISIを扱っていて,お世話に成っていた販売会社です。


戻る