平成17年度〔2005〕No.50
宮崎県工業技術センター・宮崎県食品開発センター研究報告

Ｃ＃言語による二次元ＣＡＤ／ＣＡＭソフトの開発 ＊外山真也＊1Development of the 2D CAD/CAM System with Programming Language C#
Masaya TOYAMA
C#言語による二次元CAD/CAMソフトの開発を試みた。オブジェクト指向を取り入れ，直線や円弧などの図形データのクラスを作成し，徹底した構造化を実施した。その結果，デバッグが容易でかつ操作性も向上したCAD/CAMソフトを開発できた。また，作成した図形データからワイヤカット放電加工機やレーザー加工機などの二次元加工用NCデータを作成できる機能を備えることができた。
キーワード：CAD, CAM, C#, Programming, NC
１

はじめに
著者は，昭和60年から，県内中小企業におけので，開発を通して得られた知見と成果を報告す
る。

る設計生産工程の合理化を目的として，CAD/CAMを主体としたソフト開発を行ってき２た。平成５年には，Windows版二次元

２−１ 図形形状のクラスによる構造化

CAD/CAMソフト「TOMCAD」を開発し市販化している。

開発方法
図形形状のクラス化においては，まず点(ClsXYZ) について行い，XYZ座標のデータを有TOMCADは，一般のCAD(例えばAutoCAD)する構造とした。直線(ClsLine)は，始点と終点の機能だけでなく，NCデータを作成するCAM機の二つの点データでクラス化し，円弧(ClsArc)は，能を有する二次元CAD/CAMソフトである。特中心点，始点，終点の三つの点データおよび半径にワイヤカット放電加工機に対応したNCデータデータでクラス化した。の生成機能において，工具初期位置と加工開始

また，各図形形状のクラスには，その図形にお点を指定するだけで「往復繰り返し加工」用のいて必要な，図形描画(Draw)，交点計算などのNCデータを自動的に生成する優れた特徴があ関数を用意した。例えば，Lineのクラスにおいり，現在でも二次元CAD/CAMとして活用されて，交点計算の場合，直線と直線の交点(CrsLL)ている。しかし，近年多用されている多軸制御や直線と円弧の交点(CrsLC)，線分の傾き角度，のNC工作機械による複雑な加工にまで適用する直線がある領域内に含まれているかどうか判定すためには，データ構造の見直しや改善が必要でる関数などである。

あった。

この結果，直線や円弧の図形形状に関する関数

そこで今回，C#言語による二次元CAD/CAMがおのずと整理され，各図形オブジェクト単位でソフトの開発に取り組み，オブジェクト指向によの関数を参照できるため，プログラムも見やすくるデータ構造の整理と操作性の向上を目指した。

なった。

このCAD/CAMソフトの実用化の目処がたった

２−２ 図形形状データを保存する領域の作成
これらの図形形状のクラスを作成した後，図形＊

設計生産工程の省力化に関する研究（第３報）＊１ 機械電子・デザイン部

データを保存しておく図形データ配列リスト(ClsVectorFig)を作成し，この配列に直線や円弧
33

Ｃ＃言語による二次元ＣＡＤ／ＣＡＭソフトの開発などの図形データを登録するようにした。

これらのクラス化の簡単な例を図１に示す。

実際には，この配列データもクラスとして作成

このリストには，ClsXYZ，CLsLine，ClsArc，した。このクラスにおいて，マウスの動きにあわClsVectorFigの四つのクラスが示されている。

せて近傍点の表示，削除の場合の削除される図形

ClsVectorFigは配列リストで，ここに直線や円の表示などの機能を持たせた。

弧のデータを保存するようにした。そして，これらの点データの出力書式は，ClsXYZのSave関数が利用されているため，書式の変更はこのClsXYZのSave関数を修正するのみとなるので，後の修正変更が容易になった。
さらに，このクラスClsVectorFigを利用すると，この配列リストのデータから，ある指定した点の近傍にある直線や円弧の図形を抽出して，新たなClsVectorFigを作ることが容易にできる。
このような関数を開発し，トリムや角整形等の機能を実現することができ，図形の描画機能なども各々のクラスにおいて作ることにより，従来よりは容易に開発できた。
３

開発した主な機能の特徴
開発したソフトの動作に関し，特徴とするいくつかのコマンドについて説明する。
３−１

トリム機能

トリム機能は，既に描かれている直線や円弧などの図形において，その一部分を削除する機能である。
図２にトリムを実行している例を示す。この例
では，４本の直線を作成し，トリムにおいてマウスの近くにあるトリム可能な部分がピンク色になって示されている。このとき，マウス左ボタンを
図１ 各クラスのプログラム例

図２ トリム機能の実行例

34

クリックするだけで図３のように修正できる。
この機能は1)まず，配列リストClsVectorFig

図３ トリムの実行結果

Ｃ＃言語による二次元ＣＡＤ／ＣＡＭソフトの開発から直線と円弧の図形のみを抽出する。2)マウス

３−３ NCデータの生成の近くに存在する図形を探索する。3)その図形とNCデータの生成においては，工具の初期位置他の図形との交点を求める。4)マウスの位置に最と加工したい形状の加工開始図形を指定するだも近い交点を求める。5)マウスの近くにある部分

けで，その形状を加工するNCデータを自動的にの図形のみを取り出す。6)表示する。この関数の生成するようにした。
NCデータの作成手順は以下のようにした。

開発もクラスを利用することにより容易に実現できた。

1)

指定した工具の初期位置から加工開始図形に垂直におろした直線と加工開始図形との交３−２ 角整形機能点を求める。

角整形機能は，図形形状の角部分を面取りする機能である。Ｒ面取りを実行している例を図４に

2)

加工方向に従って図形の端点を求める。

示す。この場合も，トリムと同様に，マウスカー

3)求めた端点と同じ座標を持つ図形を探索する。

ソルの近傍において角整形可能な部分がピンク色で示されている。このとき，マウス左ボタンをク

4)

図形が見つかった場合，その図形においてリックするだけで，図５のように，角整形と不要NCデータを作成し保存する。図形が見つからな部分の図形がトリムされる。

なかった場合，処理を終了する。

この機能は，配列リストからマウスの位置に近い二つの図形を抽出し，それらの図形の交点を求

5)

その図形におけるもう一方の端点を求め，3)の処理へ進む。

め，角整形図形を表示するようにした。このことにより，このような処理機能を容易に実現することができた。

以上の操作を自動的に行い，中間データを作成する。そして，ポストプロセス処理を実行して，工作機械に適したNCデータを作成する。
図６にNCデータの作成機能の実行例を示す。
このとき作成されたNCデータの例を図７に示す。ここに示すNCデータの作成機能は最も単純なものであるが，ワイヤ放電加工機などでは，形状に沿って往復加工を数回繰り返す場合があり，そのようなコマンドも開発することができた。

図４ 角整形(Ｒ面取り)機能の実行例

図５ 角整形(Ｒ面取り)機能の実行結果

図６ NCデータ作成機能の実行例

35

Ｃ＃言語による二次元ＣＡＤ／ＣＡＭソフトの開発

このファイルを各種工作機械ごとに用意しておけば，NCデータのコマンド実行時に適宜HFPファイルを選択するだけで，容易に目的の工作機械に対応したNCデータを作成することができる。
NCデータの作成を実行したとき，図形をNCデータの作成手順に従って探索すると，図９に示すような中間データが作成される。このデー
タは加工順序に従って並べられた各図形の端点座標を示す。
これらの座標データを用いてHFPファイルの図７ 作成されたNCデータ定義書式に従いNCデータを作成し，各種工作機械に最適なNCデータを作成している。
このような手法を用いることにより，多種多

３−４ HFPファイルデータについてHFP(Header Footer Parameter)ファイルは，各種工作機械に対応したNCデータに変換するた様な工作機械に対応したNCデータを作成することが容易になった。
このポストプロセス部分は，他のCAD/CAMめのポストプロセスデータファイルである。図８にそのHFPファイルの例を示す。

システムにおいてはオプション設定であり，通常公開されていない。そのポストプロセス機能を図８に示す書式で定義し，ユーザー側で各種工作機械に対応した定義ファイルを作成できるようにすることで利便性が向上した。
４

まとめ
今回の研究開発により，操作性の優れた二次元CAD/CAMソフトを開発することができた。
オブジェクト指向により開発したソフトは，一つのクラスに，関連する関数を内包することができるため，開発しながら関数を整理すること
図８ HFPファイルデータの例が可能である。その結果，開発労力が軽減され，デバッグも容易になってくることを実感できた。
今後の課題として，文字(寸法文字などの傾いた文字の)の表示や，NCフライス加工におけるポケット加工機能などの実現がある。
現在，県内企業での試用を実施している。今後，さらにユーザーの要望に対応した機能追加を行い，中小企業における生産加工工程の合理化を推進したいと考えている。

図９ 作成された中間データの例

36

Ｃ＃言語による二次元ＣＡＤ／ＣＡＭソフトの開発

５

参考文献

1)

有限会社

ガリバー：Visual C#.NET 基礎

300の技，技術評論社(2006)
2)

第二IO編集部編集：DirectX9実践プログラミング，工学社

37