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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CAD作ろ! レイヤ・色・線種の設定(1)
前節「線の属性」で記述したように、CADで作図する線には、レイヤ・色・線種・線幅などの属性が付加されます。それぞれ、いろいろな表現方法がありますし、これはCADによって異なる場合が多く、データ変換の際には悩みの種になるかもしれません。そのため、AutoCAD(DXF)とのデータ変換を主体とするような場合には、なるべく、AutoCAD(DXF)と似たような形式にする方が良い場合もあります。また、CADの特色を出したい為に、敢えて独自方法を採用する場合もあります。
 
さて、本プログラムでは、
【レイヤ】
・レイヤ数を自由にしたい
・レイヤ単位で縮尺を指定する
・AutoCADのBYLAYERのような事がしたい
【色】
・色設定をある程度、したい
・フルカラー対応したい
【線種】
・線種数を自由にして、線種パターンを自作したい
・線種の各長さはmm単位で指定したい
【線幅】
・線幅はmm単位で指定したい
を目標とします。
 
さて、まずはメニューに「設定」を追加し、「レイヤ」「色」「線種」の項目を入れます。線幅は数値指定をしますので必要ないでしょう。(※「太い」「細い」のように指定したい場合には必要になってきます)
そして、画面上に、これから作図する線のレイヤ・色・線種・線幅を指定する入力欄を付けます。取りあえず、ComboBoxコンポーネントで行う事にします。
また、データ構造に、線の属性を格納するよう追加します。
TDataLine = record  // 線分データ定義
 x1,y1 : Double;    // 開始点座標 X,Y[mm]
 x2,y2 : Double;    // 終了点座標 X,Y[mm]
end;
          ↓
TDataLine = record  // 線分データ定義
 lay : Integer ;    // レイヤ番号
 col : Integer ;    // 色番号
 lin : Integer ;    // 線種番号
 wid : double ;    // 線幅
 x1,y1 : Double;    // 開始点座標 X,Y[mm]
 x2,y2 : Double;    // 終了点座標 X,Y[mm]
end;
色番号、線種番号、線幅の値が「-1」の場合、レイヤで指定してある内容が反映される事にします。
 
色の設定から考えます。
色は、基本7色(背景色=白)+濃い色=15色をメインとして、+拡張色15色を自分で定義出来るようにします。その他の色は、線を作図する際に「その他」を選べばフルカラー指定出来るようにします。この設定はファイルに保存出来るようにします。

これに併せて、色設定テーブルを定義します。
TColorTable = record  // 色設定テーブル
 nam : String ;     // 色名
 val : Integer ;     // 色コード
 cnt : Integer ;     // 要素数
end;
これを動的配列で
var
 ColTbl : array of TColorTable ;
 ColTblN : Integer ;
ColTblN := 30 ;
SetLength(ColTbl, ColTblN);
ColTbl[0].nam := '青色'; ColTbl[0].val := clBlue;
・・・
のように扱うようにします。
線データの色番号は、この配列 ColTblの添え字を扱うものとし、その他の色指定時には、負の値として格納するようにします。
 
次に線種の設定です。
線種は、いろいろなパターンを作りたいので、色のような固定的デザインは出来ませんから、StringGridを利用する事にします。

線種名は自由に決める事が出来、実線、点線、破線、一点鎖線、二点鎖線、のように入力したり、DXFの CONTINUOUS、CENTER、DOT、のように入力する事とします。同じ名前を重複出来ないようチェックします。線種の数は最低でも1つ必要とし、既に使っている線種は削除出来ないよう、要素数を管理するようにします。パターンは数値指定10個まで出来るようにして、「− − −」で線の長さを20、空白を10、にしたい場合には、数=2、パターンを「20」「-10」と指定する事にします。
画面表示をそのまま行うようにすると、表示速度が遅くなってしまうだろうと思われますので、簡易表示モードでは簡易表現で表示するようにして表示速度を速くしようと思います。
「No.」の値が、線データの「線種番号」に相当し、この値は自動的に発生し、編集出来ない事とします。編集出来るようにすると論理的におかしくなり得る為です。StringGridの行番号にしていないのは、StringGrid内で線種定義の位置が自由に変えられる為です。設定を変えるたびに線データの内容を変更する訳には行きません。この設定はファイルに保存出来るようにします。
これに併せて、線種設定テーブルを定義し、動的配列で扱うものとします。
TLinestyleTable = record  // 線種設定テーブル
 no : Integer ;       // 線種番号
 nam : String ;       // 線種名
 val : Integer ;       // 簡易表現
 n  : Integer ;       // パターン数
 ptn : array of Double ;   // パターン
 cnt : Integer ;       // 要素数
end;
パターンは最大10までとしていますから、ptnを静的配列にしてしまっても良いのですが、メモリ節約のためと、将来増えるかもしれませんので、多少ややこしいですが動的配列にしています。
 
そしてレイヤの設定です。
線種と同様、レイヤ数を可変にするため、StringGridを利用する事にします。

「No.」の値が、線データの「レイヤ番号」に相当し、この値は自動的に発生し、編集出来ない事とします。レイヤ名は自由に決める事が出来、重複してはなりません。線データにレイヤ番号ではなくレイヤ名を入れたい所ですが、データ量が大きくなってしまう事と、レイヤ名を編集した場合に起きうるであろう事を避ける為、このようにします。「□Active」のチェックは、要素の端点を拾う・拾わない、要素選択を行う・行わない、に対応させます。「□Display」のチェックは、そのレイヤを表示する・表示しない、に対応させます。「尺度」は、レイヤ単位で尺度を指定出来るようにします。既定色・既定線種・既定線幅は、レイヤ定義した色・線種・線幅を指定します。線の作図時に「レイヤ色」を指定すれば、その線のレイヤで定義した既定色で表示される事になります。これにより、レイヤ色で作図した線の色は、レイヤの既定色を変えるだけでいろんな色に簡単に変更出来るようになります。線種尺度は、レイヤの尺度により線パターンが広がり過ぎたり狭くなり過ぎたりするのを調整するための倍率を指定する事にします。「要素数」は線種と同じく、既に利用しているレイヤを削除出来ないようにするための管理用です。この設定はファイルに保存出来るようにします。
これに併せて、レイヤ設定テーブルを以下のように定義し、動的配列で扱うものとします。
TLayerTable = record // レイヤテーブル
 no : Integer ;    // レイヤ番号
 nam : String ;    // レイヤ名
 act : Boolean ;    // Active
 dsp : Boolean ;    // Display
 sc : double ;    // 尺度
 scs : String ;    // 尺度(文字)
 dc : Integer ;    // 既定色
 dcs : String ;    // 既定色(文字)
 dl : Integer ;    // 既定線種
 dls : String ;    // 既定線種(文字)
 lsc : Double ;    // 既定線種尺度
 wid : Double ;    // 既定線幅
 cnt : Integer ;    // 要素数
end;
 
 
取りあえず、ここまでのサンプルプログラムです。
サンプルプログラムのソース
 
レイヤの順番やActive/Display・尺度等、線種パターン、線幅、等の対応は、まだ行っておりません。一気に行うと煩雑になって分かりにくくなるでしょう。少しずつ進めて行きたいと思います。
 
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
 ▲PREV
 ▼NEXT
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.