DXFから、穴情報を取出す

NC

外出自粛のなか、DXFデータの円要素を読み込み、穴情報を取り出すソフトを作成してみました。
CADなどで描いた「円要素」を穴と捉え、位置や直径などを取り出します。
取り出した情報ファイルはテキストやエクセルの他に、簡易的なNCデータも自動作成する仕様としました。

DXFファイル

「DXF」は「Autodesk社」が開発した、CAD間でやり取りできる、データ構造の一種ですが、事実上の標準フォーマットになっていてほとんどのCADで読み書きできます。
DXFには、テキストとバイナリ形式が存在するようですが、ここで紹介するのは、テキスト形式に限定させていただきます。

DXFファイルを覗いてみる

テキスト形式のDXFファイルであれば、メモ帳やエディタなどで開く事ができます。

DXFファイルは、ほとんどのCADであれば、作成する事ができると思いますし、このサイトでも取り上げてる、「Fusion360」でも作成可能です。
スケッチモードで適当な図形(今回は穴がテーマなので円など)を描いて、
「スケッチ1」⇒ マウス右クリックから「DXF形式で保存」で作成できます。

Fusion360で作成された「DXFファイル」をエディタなどで開いてみます。
意味は置いといて、数字と単語が羅列されています。
このDXFフォーマットの詳しい内容は理解していませんが、2行が一組で意味があるようです。
ここでは詳細の説明はできませんので、ご了承ください。
興味ありましたら、Autodeskのサイトなどから検索してみてください。

円情報はどこにある?

ここでのテーマは、DXFから穴情報を取り出す事です。
通常、加工図面では、穴は円で描かれていると思うので、まずは円情報を探してみます。
DXF形式の、「円」のキーワードは「CIRCLE」になります。
ちなにみ、「CIRCLE」は閉じている図形です。閉じていない場合には「ARC」となりますので注意してください。
では、「閉じた円」が含まれるDXFファイルを作成し、「CIRCLE」文字列を検索してみます。
位置や円径などは単純でないほうが分析しやすいです

CIRCLE」と「AcDbCircle」が見つかりました。
私自身、DXF形式を理解しているわけではないので、正確な説明はできませんが、「円」の情報はこの2つのキーワードから取り出すことができそうです。
この例で分析してみると、「0」「CIRCLE」「5」「100」と続き、その後
「8」「0」「100」「AcDbCircle」「10」「-44.847…」「20」「34.949…」が見つかります。
この値を元図面と比較するとルールが見えてきます。

「10」の次が円中心のX座標。
「20」の次が円中心のY座標。
「30」の次が円中心のZ座標。
「40」の次が円の半径。

これが分かれば、「DXFファイル」から「AcDbCircle」を検索し、その次の行から「10」「20」・・のキーワードで、穴の中心と径の情報を取り出す事ができますね。
ただ「AcDbCircle」はサブクラスとしての定義みたいなので、単純な「CIRCLE」セクションに直接図形情報がある場合もあるようです。
ソフトを開発する場合、より汎用性を求めるなら、そちらにも対応しておいたほうがいいかもしれません。

穴情報取り出しソフトGetCircleFromDxf.exe

DXFの円定義方法がわかったので、このルールを基に穴の位置と径の情報として取り出すソフトを作成しました。

C++Builder

開発環境は、C++Builder Community Editiond です。
個人使用の場合には、1年間無料で使用できます。
ライセンス更新もできますからソフト開発の勉強にはもってこいです

こんなソフト

まずは、起動した、ウィンドウに「DXFファイル」をドロップします

ドロップすると、ファイル名や作成するデータの選択画面になります。

デフォルトでは、「Text」と「Excel」がチェックされています
必要ない場合には、チェックを外します。
「円座標取出し」ボタンで、ドロップした「DXFファイル」と同じフォルダに、穴の中心位置と穴径の情報ファイルが出力されます。
簡易的なテンプレートデータですが、「NcData」をチェックすると、ファナック系のNCデータを作成します。

NCデータは、 ファナックをターゲットにしています
メインプロで工具交換や回転など行い、サブプロには、穴径で分別した穴位置を指令するような構成です

NCプログラムの構成やメイン・サブプログラムについては下記で詳しく説明しています。
興味あれはご覧ください。

「DXF」では「穴の属性」までは認識できないので、メインプロは、単純な固定サイクルコードを出力するのみです。
固定サイクルの種別、加工深さ、加工条件などは、編集が必要です。

実際の条件などの出力は「DXF」の情報だけでは、取得できないので「DXF」だけで求めるNCデータを作成する事はできませんが
NCコードの出力順序など若干のカスタマイズはできるようにしました。
実行ファイルと同梱されている、「TempFile」の中の4つのテキストファイルでカスタマイズできます。

・「Header.txt」
 メインプロ全体の、始まりのコードです。O番号や初期化コードを指令。

・「Footer.txt」
 メインプロ全体の、終了のコード。キャンセルや「M30」。

・「ToolBegin.txt」
 工具交換など、各工程の始まりのコード。
  工具交換、回転、工具長補正、固定サイクルなど。

・「ToolEnd.txt」
 各工程の終了コード、回転・冷却のキャンセルなど。

ダウンロード

こちらから、ダウンロードできます。
単純な穴あけ加工や、穴位置の最終確認などには、使えるかもしれません。
「Vector」にも登録しました。

「Vector」はこちらから、ダウンロードできます。

コメント

  1. ZENKYU より:

    僕の会社でもマシニングセンタ系でNCデータを編集して使う人はいませんね。

    JWWから出力したデータをAWKで加工して穴あけ加工のNCデータを作成していますが
    だれも使ってくれる人がいません。

    コマンドプロンプトでのCUIなのでやって見せても使ってはくれません。
    かずばんさんみたいにC++を使えるといいんですけど。

  2. kazuban kazuban より:

    ZENKYU さん、こんにちは。
    コマンドプロンプトは、最近の子は、その存在も知らない子が多いです。
    GUI操作は、すっごくカチカチと高速ですけどね~

    そうですか、ZENKYU さんも、穴あけデータ自動作成はやっていたんですね、さすがです。
    それにしても、AWKとは、マニアックですね。
    私もLinuxでは標準で使えるので、少しだけ触った経験ありますが、文字列処理にはもってこいですね。

    • ZENKYU より:

      手元にAutodesk社の1987年8月19日発行の応用編マニュアルがあって
      DXFファイルの構造が書いてあります。

      BASICでの読み込み書き出しのサンプルプログラムも書いてありますが
      ヘタレなわたしには、なんとなくしか理解できませんでした。

      たぶん R10(EX-3)あたりだったと思います。

      直接の担当者はほかの人だったし、1989年に導入された3次元cad/camが
      UNIXのワークステーションだったので立ち上げに大変で
      AUTOCADのほうまで手が回りませんでした。

      最近も使いました「 VI エディタ 」。これもマニアックな部類にはいりますかね(笑)

      • kazuban kazuban より:

        DXFの仕様もかなり変化しているようですね。
        たまに、CADの読み込む時に「このバージョンは対応してません」とかでる場合があります。
        今回の円のキーワードも、昔は「CIRCLE」しかなかった記憶してます。

        「 VI エディタ 」は、Windowsユーザーからはマニアックかもしれませんが
        Unix系では、まずこれだけは覚えましょ!の必須エディタですね
        でもたまにしか使わないと、忘れてしまいます。

タイトルとURLをコピーしました