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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CADを考える:線幅
「SXF仕様書」の「図面情報」の次は「図面構造」ですが、図面構造フィーチャには以下のようなものがあります。
・用紙フィーチャ
・レイヤフィーチャ
・既定義線種フィーチャ、ユーザ定義線種フィーチャ
・既定義色フィーチャ、ユーザ定義色フィーチャ
・線幅フィーチャ
・文字フォントフィーチャ
前頁では「色」について見ましたので、次に「線幅」について見てみます。
 
NEC PC-9801・DOS時代、GDC(グラフィックチップ)直接アクセス、グラフLIO、グラフBIOSを利用して線分等を画面描画する際、線幅の指定というものはありませんでした。線幅は全て1ドット。2ドット線幅の線を描きたい場合には、1ドットずらして2本の線を描く、とか、線をDAA変換してドットで描画するようにしたり等のような措置を取る必要があったため、ほとんどのDOS版CADでの画面描画では線幅表現はされていませんでした。
プロッタではどうか、というと、線幅は、どのペン(何mmのペン)を使って描画するか、という事になっていました。大抵のCADでは、CAD側の色番号とプロッタのペン番号を対応させ(実際、カラーペンを使う事もあったので)、CADでの色は線幅と対応される、という風になっていました。つまり、DOS版CADでは、自由な色×自由な線幅での表現というのは、ほとんどありませんでした。
 
Windowsになると、WindowsGDIでは、線幅の指定が出来るようになっています。線幅を指定すると線種が実線になってしまうケースもあるんですが、それでも、自由な色×自由な線幅の表現が可能になっています。線幅は、ドット(ピクセル)指定を行うようになっていて、これは、GDIでも、GDI+でも、Direct2Dでも、変わりません。印刷する際も同様です。但し、プリンタ・プロッタの作図領域は広く解像度の指定もあるため、1ドット(ピクセル)の大きさは変動します。CADではやはり、mm指定をしたい、という事もあるので、解像度の取得を行い、mm→ドットの変換を行ってから印刷されます。これは各座標等の場合と同様です。
// プリンタの横DPI
xdpi := GetDeviceCaps(Printer.Handle, LOGPIXELSX) ;
// プリンタの縦DPI
ydpi := GetDeviceCaps(Printer.Handle, LOGPIXELSY) ;
 
width_dot := Int(width_mm * xdpi / 25.4) ;
 
Windows用のCADソフトでも、従来と同じく、色と線幅を対応させるという場合があります。Jw_cad での基本設定の線色指定はそのようになっていますし、AutoCADでの色従属テーブル(ctb)もそのようになっています。が、Jw_cadでは1/100mm単位設定をすれば線分1本毎に線幅を指定出来るようになっていますし、AutoCADでも線分1本毎に線幅指定が出来るようになっています。但し、やたらめったに線幅を数多く使用しても図面が見えにくくなる事も多いですし、線幅を指定して画面描画をするとその分遅くなってしまうので通常、線幅を画面描画に反映しない設定にしていると、知らない内にいろんな線幅を使ってしまって、印刷した際に思わぬ線幅の狂乱と出会う事になるかもしれません。そのため、どこかで線幅の管理を行う場合も多いです。例えば、AutoCADでは、線分等の線幅に「ByLayer」を指定しておき、画層(レイヤ)管理にて、各画層の線幅を指定する、というケースも多いです。
 
 
前置きはこれくらいにして、SXF仕様での線幅は、既定義線幅9種類+ユーザ定義線幅6種類=合計15種類が利用可能です。
 
線幅
線幅コード線幅
10.13
20.18
30.25
40.35
50.5
60.7
71.0
81.4
92.0
10未使用(予備用)
111番目に定義された線幅
122番目に定義された線幅
133番目に定義された線幅
144番目に定義された線幅
155番目に定義された線幅
166番目に定義された線幅
パラメータ説明範囲
Widthdouble線幅0<長さ≦1.0×1015
備考
・線幅フィーチャは、幾何/表記要素、構造化要素のパラメータとして指定され、その値は線幅定義テーブルへの登録順である線幅コード(1から始まるシーケンシャル番号)を使用する。
・JIS製図基準で定められている9種類の線幅(上図参照)を既定義線幅として扱い、これら以外の線幅をユーザ定義線幅と呼ぶ。
・既定義線幅に割り当てられる線幅コードは固定で、上図に示す通りの値をとる。
・ユーザ定義線幅に割り当てられる線幅コードは11からの16までのシーケンシャル番号となる。
・幾何/表記要素、構造化要素のパラメータとして一度も指定されない線幅フィーチャを使用してはならない。
 
それでは実装してみます。線幅項目は record で定義して、動的配列として登録するものとします。
type
 ・・・
 TZumenWidth = record  // 図面構造|線幅
  Width : double;  // 線幅
  cnt : Integer ;  // 線幅内要素数
 end;
 ・・・
 TDataClass = class
  public
   { Public 宣言 }
   zt : TZumenTitle; // 図面情報|図面表題欄
   zp : TZumenPaper; // 図面構造|用紙
   zLay : array of TZumenLayer; // 図面構造|レイヤ
   zLayN: Integer ; // レイヤ数
   zCol : array of TZumenColor; // 図面構造|色
   zColN: Integer ; // 色数
   zLtp : array of TZumenLtype; // 図面構造|線種
   zLtpN: Integer ; // 線種数
   zWid : array of TZumenWidth; // 図面構造|線幅
   zWidN: Integer ; // 線幅数
   constructor Create;
   ・・・
   function AddWidth(w:double) : Boolean;
   function EditWidth(n:integer;w:double) : Boolean;
   ・・・
  private
   { Private 宣言 }
 end;
 
 
それでは簡単なテストプログラムです。実行型ファイルは、サイズが大きくなるので含めていません。ソースだけです。
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
CADを考える
 ▲PREV
 ▼NEXT
M7
Jw_cad
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.