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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CADを考える:文字フォント
「SXF仕様書」の「図面情報」の次は「図面構造」ですが、図面構造フィーチャには以下のようなものがあります。
・用紙フィーチャ
・レイヤフィーチャ
・既定義線種フィーチャ、ユーザ定義線種フィーチャ
・既定義色フィーチャ、ユーザ定義色フィーチャ
・線幅フィーチャ
・文字フォントフィーチャ
前頁では「線幅」でしたので、次に「文字フォント」について見てみます。
 
NEC PC-9801・DOS時代での文字は、PC内にある漢字ROMより16×16ドット(PC98ハイレゾでは24×24ドット)の文字情報を読み取り、それを画面に描画する事が出来ました。しかし任意角度の文字回転が出来なかった為(90°毎は可、文字は大きくなるけれども45°毎も可だがほとんど使用されなかった)文字の画面描画は余り綺麗なものではありませんでした。
その為、文字を線分の集まりとして構成するベクトルフォントを作成し、ファイル化して、それを直接読み込む等をして文字の画面描画が行われていました。ANK文字+第1水準+第2水準+記号で数千文字のデータを作成するにはかなりの時間が必要とされた事でしょう。
 
プロッタの場合には、プロッタに漢字ROMが搭載されている場合には、これを利用する事が出来ました。このプロッタフォントは任意角度の回転も出来ますので、印刷のほうでは、文字についてはさほど心配はありませんでした。但し、漢字ROMを搭載していないプロッタもありますので、その場合にはどうするのか?というのはありました。
 
AutoCADの場合は、BIGFONT.SHX、EXTFONT.SHX というベクトルフォントファイルが利用出来るようになっており、それを利用して文字を印刷できるようになっています。JW_CAD(DOS版)の場合には、プロッタファイルで漢字ROMを使って印刷するよう指定する事が出来ました。プロッタに漢字ROMがない場合は、疑似線文字(フォントファイルを使用せず、ドット情報から線分に変換してその文字らしく印刷させる機能)で印刷する方法、また、HPGLPという外部ツールを利用して印刷する方法がありました。
 
Windows時代になると、画面描画で TrueTypeFont という綺麗な文字を利用する事が出来るようになっており、WindowsGDIでも TrueTypeFontを利用して画面描画・印刷を行う事が出来るようになっています。通常の文字作図命令は TextOut でこれには回転角度の指定は無いのですが、LOGFONTで指定する事により文字を任意角度に回転させることが出来るようになっています。
 
AutoCADは従来同様 SHXフォントを使えますが、新たに、TrueTypeFontも使えるようになりました。尤も、AutoCADで TrueTypeFontを使用すると SHXフォントに比べて遅くなってしまうため、高速性を重視する利用者は Windowsでも SHXフォントを利用していたりします。Jw_cad では日本語のTrueTypeFontを利用出来るようになっています。何故か欧文フォントは使用できません。
 
Windowsでのフォントは、TrueTypeFontだけでなく、ドットフォント、ベクトルフォント、OpenFont、等ありますが、一般的には TrueTypeFont が使用されます。欧文フォントは日本語が利用出来ませんので注意が必要です。グラフィック文字のフォントや数値だけのフォントもあります。先頭に「@」文字が付いているフォントは、縦書き用フォントです。欧文フォントのほとんどと、和文フォントでフォント名に「P」の文字が付いているフォントは、プロポーショナルフォントで、文字1文字1文字の幅がドット単位で異なっています。例えば、「i」の文字幅は狭く、「w」の文字幅は広い、等です。
 
その為、日本国内製CADの場合、文字描画を行うのに、文字を1文字ずつばらばらにして画面描画・印刷を行っていましたが、その手法だと、プロポーショナルフォントの場合には、1文字1文字の幅を算出して位置出しをしないといけませんので、文字作図に手間が掛かってしまいます。ですので Windowsアプリでは、1文字単位ではなく、1文字列単位で画面描画・印刷を行っている場合も多いと思われます。
 
 
と、前置きはこれくらいにして、SXF仕様での文字の扱いは、まず文字フォントフィーチャにて、利用する文字フォント一覧を生成しておき、文字フォントコードを1〜1024の数値で順番に割り付けます。そして文字要素フィーチャで文字フォントコードを指定し、どんな文字フォントで作図をするのかを指定します。
 
文字フォント
文字フォントコード文字フォント名
11番目に定義されたフォント名
22番目に定義されたフォント名
10241024番目に定義されたフォント名
パラメータ説明範囲
name[257]char文字フォント名0<文字列長≦256バイト
備考
・文字フォントフィーチャは幾何/表記要素、構造化要素のパラメータとして指定し、文字フォント定義テーブルへの登録順である文字フォントコード(1から始まるシーケンシャル番号)を使用する。
・幾何/表記要素、構造化要素のパラメータとして一度も指定されない文字フォントフィーチャを使用してはならない。
・文字フォントのtoplineおよびbottomlineを基にして、文字フィーチャの文字範囲高が定まる。
・toplineおよびbottomlineに対するbaselineの位置は、利用する文字フォントによって既に決まっている場合、別途計算で求めない。
・CAD固有のフォントでbaselineが配置基点になっているフォントを利用する場合は、基準の高さが文字範囲高にフィットすることを優先し、baselineの位置を求める。
・middlelineは、toplineとbottomlineの中間にあり、文字フィーチャにおける左中・中中・右中の配置基点を通る。
 
それでは実装してみます。線幅項目は record で定義して、動的配列として登録するものとします。
type
 ・・・
 TZumenFont = record  // 図面構造|文字フォント
  name : string;  // 文字フォント名
  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 ; // 線幅数
   zFnt : array of TZumenFont; // 図面構造|文字フォント
   zFntN: Integer ; // 文字フォント数
   constructor Create;
   ・・・
   function AddFont(s:string) : Boolean;
   function EditFont(n:integer;s:string) : Boolean;
   ・・・
  private
   { Private 宣言 }
 end;
 
なお、文字フォントで指定する TrueTypeFont は、使用するPCによって、どんなものが使えるのかが変わってきます。「MS 明朝」や「MS ゴシック」はほとんど全ての Windows PCで利用出来ますが(※意図的に削除していない限り)、「HG平成ゴシック」や「江戸勘亭流」等は使えないPCもあります。というのも、フォントファイルはワープロソフトやハガキ印刷ソフト等に添付されていたり、フォントファイルやフォントパッケージを別途インストールしている場合も有り得るからですが、これは、PC1台1台異なっているというケースがほとんどです。
 
例えば、AというPCで作成したデータを、BというPCにコピーした際に、文字フォントが違う?という事が有り得ますが、これは、Aで使用した TrueTypeFontがBには入っていない、という事になります。こういった場合には、「MS 明朝」や「MS ゴシック」で代替表示を行えば良いでしょう。但しこういった場合には、文字フォントのデータは書き換えずそのままにしておく、というのが通例のようです。
 
 
それでは簡単なテストプログラムです。実行型ファイルは、サイズが大きくなるので含めていません。ソースだけです。
 
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.