AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
データベース【CADデータベースな話(5.4)】
データテーブルを実装する前に、線分・円・円弧・文字を画面に作図する機能を付けておきます。画面・ビュー関連の変数 Phsx,Phsy(絵を表示するPaintBox1の横縦サイズ[ドット])、LogicWx1,LogicWy1(ビュー左下座標[mm])、LogicWx2,LogicWy2(ビュー右上座標[mm])、LogicScale(mmドット変換用)、及び、作図する線分等の色・線種・線幅関連を仲介する変数を使って UnitV.pas 内に描画用の関数・手続きを作成します。
 
UnitV.pas には、描画のために必要な計算関連の関数・手続きも追加しています。距離計算、角度計算、回転計算、丸め計算、です。
 
PaintBox等の Canvas のペン・ブラシを指定する手続き、画面をクリアする(消す)手続き、単純なドット指定の線を作図する手続き、mm座標で指定して線分を作図するGLLine手続き(線種未対応)、線種対応させた GL_Line・GL_Circle・GL_Arc手続き。円・円弧は 72分割の内接多角形として作図しています。分割数を増やせば綺麗になりますがその分遅くなると想定されます。円・円弧はドット指定の通常作図(Ellipse命令等)でも線幅を指定すると実線以外(破線等)は作図出来ません。更に WindowsGDIでの線種指定で任意mmサイズや標準以外の線種を表現するのは至難の業となります。更に線幅も表現する必要がありますので現実的に不可能ですから、線種は、短い線分の集まりとして表現します。円・円弧を短い円弧の集まりとして表現しようとするとプログラムは更に複雑になります。そうなれば速度もやや遅くなるであろうと想定されます。更に、ビュー枠内にのみ作図を行うための処理=クリッピング処理も必要になってきますが、「CADつくろ」コーナーにも記載しましたように、各微小円弧のクリッピング処理も必要となってきますので、プログラムは更に更に複雑となります。多角形として処理する事により全て線分として計算出来ますから、その辺りの複雑さから回避する事が出来ます。72分割というのは単なる経験則でそう決めているだけです。もっと細かくしたり粗くしたり等は自由に変更して下さい。GL_Text1手続きは横書き文字の作図、GL_Text2手続きは縦書き文字の作図、を行います。なお、座標値等には尺度は考慮していません。
 
とりあえず、一覧画面から白紙状態のCAD作図画面 Form13(Unit13.pas)を表示する際に、作図がうまくいっているかどうかを試すためのテストを行うようにしています。

一覧表をダブルクリック
又は[CAD]ボタンをクリック


拡大表示


 
ここまでのソースプログラムを圧縮しています。
各画面やプログラム内容は下記で確認して下さい。

 
次に、TABLE7〜の実装について考えていきます。
これまで通り、UnitV.pasに定数の定義、Form1(Unit1.pas)内に各テーブルの生成用手続きを記述します。まずは、レイヤの設定を行うための画面 Form14(Unit14.pas)を作成します。

レイヤは0〜255を使えるようにしていますので、一覧画面からCAD画面を開く前に、新規で開く際、レイヤテーブルを生成し、デフォルト設定=0〜255のデータレコードを生成するようにしています。この画面ではレコードの追加は行わず、レコードの編集を行うようにしています。
 
次に色の設定を行うための画面 Form15(Unit15.pas)を作成します。

色は、0値がレイヤ依存色となり、この色値の設定はありませんのでデータレコードもありません。線分等のデータで色に「0」=レイヤ依存色を指定して登録すると、そのレイヤで登録されている「レイヤ依存色」の値(1〜256)を参照します。こうする事によってレイヤ設定内のレイヤ依存色を指定する事によって図形の色を一括変更する事が出来るようになります(AutoCADのByLayerのようなもの)。
1〜256値が実際にどんなRGB色なのかを設定します。画面上の表の色値の右横にそのRGB色を表示出来るようコーディングします。
 
次に線種の設定を行うための画面 Form16(Unit16.pas)を作成します。

線種は、0値がレイヤ依存線種となり、この線種の設定はありませんのでデータレコードもありません。線分等のデータで線種に「0」=レイヤ依存線種を指定して登録すると、そのレイヤで登録されている「レイヤ依存線種」の値(1〜32)を参照します。セグメント数は0(実線),2,4,6,8,10 のうちから選択となり、線分長さ、余白長さ、線分長さ、・・・を指定します。データ量を節約するため実数値ではなく単整数値で扱います。そのためmm値の100倍値で指定するようにしています。例えば、0.5mmの場合は100倍して「50」と入力します。マイナス値は使えません。SXF仕様でのユーザー定義線種ではセグメント数は8までとなっていますが、No.15は10個必要となっていますから10までとしています。
 
色・線種もレイヤと同様、一覧画面からCAD画面を開く前に、新規で開く際にテーブルを生成し、デフォルト設定を行います。SXF仕様に似せて色1〜16、線種1〜15を自動的に登録しています。
 
次に線幅の設定を行うための画面 Form17(Unit17.pas)を作成します。線幅はデータテーブルを作成せず、直接、数値指定を行うようにします。この線幅値もデータ量節約のためmmの100倍値で指定するようにします。

 
ついでにグリッド(目盛線)の設定を行うための画面 Form18(Unit18.pas)も作成しておきます。グリッドは方眼紙のようにグレーの線で表現します。見易くするため5個毎に少し濃い線を描きます。グリッド間隔値は記憶しません。グリッド間隔に0を指定した時にはグリッド非表示として扱います。

 
CAD作図画面 Form13(Unit13.pas)に、これらレイヤ・色・線種・線幅・グリッドを指定するボタンとメニューを配置します。ステータスバーも追加しておきます。ステータスバーの一番左側にはマウスのある座標を表示するようにしておきます。その隣に現在のコマンド名、その隣に操作メッセージ用、という感じです。

[水平][垂直][線分][四角]のボタンは付けただけでまだ実装はしていませんから動作しません。
 
下記は実行した状態です。

 
ここまでのソースプログラムを圧縮しています。
各画面やプログラム内容は下記で確認して下さい。

 


 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
シェアウェア
Script!World
データベース
 A B C D
 E F G H
 I J K L
 M N O P
 Q R S T
 U V W X
 Y Z
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.