|
文字を描くには、「いろんな図形の作図(2)」の章で述べた通り、「TextOut」を使いますが、これをこのまま使うだけでは、水平の文字しか描けません。CADでは、回転した文字を扱います。ボーランド社のサイトのQ&Aページに、
「文字を斜めに表示したいのですが、どのようにしたらよいのでしょうか?」
というページがあり、そこにサンプルコードが提示されています。それを利用するのも良いですし、書籍「Delphi3 Q&A150選」(ボーランド株式会社/監修 大野元久/著 株式会社ビレッジセンター出版局)の p.75 で紹介されているサンプルコードを利用するも良いです。
var
LogFont : TLogFont ;
・・・
begin
・・・
with LogFont do begin
lfHeight := ○○ ; // 文字高さ
lfWidth := ○○ ; // 文字幅
lfEscapement := ○○ ; // 回転角度[°] 10倍値
lfOrientation := ○○ ; // lfEscapementと同じ値を入れる
lfWeight := ○○ ; // 太さ指定 通常は FW_NORMAL
lfItalic := ○ ; // 斜体指定 有=1 無=0
lfUnderline := ○ ; // 下線指定 有=1 無=0
lfStrikeOut := ○ ; // 取消線指定 有=1 無=0
lfCharSet := DEFAULT_CHARSET ;
lfOutPrecision := OUT_DEFAULT_PRECIS ;
lfClipPrecision := CLIP_DEFAULT_PRECIS ;
lfQuality := DEFAULT_QUALITY ;
lfPitchAndFamily := DEFAULT_PITCH ;
lfFaceName := 'フォント名';
end;
with ○○.Canvas do begin
Font.Handle := CreateFontIndirect(LogFont);
Font.Color := Pen.Color ;
Brush.Style := bsClear ;
TextOut(x,y,'文字');
end;
end; |
という具合のプログラムを利用します。さて、日本製のCADでは「文字間隔」というのがありますが上記にはありません。これを表現するにはどうするか?文字列を1文字ずつ取り出して、1文字ずつ描いていく事になります。そのためには、文字数を取得する関数 Lengthや、LeftStr関数などがありますが、これらはバイト数単位で、シフトJISの漢字の文字数には対応していません(※Unicode(WideString)の場合には処理が異なってきます)。ですので、シフトJISの漢字に対応した処理を用意する必要があります。
シフトJISコードは、第1文字がASCIIコードの通常利用しない値の部分(NEC PC-9800の場合ならばグラフィック文字部分)128〜159、224〜253 になりますので、文字を1つずつ見て行って、文字のASCIIコードがこの範囲にあれば、漢字であると分かり、次の1文字はシフトJISコードの第2文字である、と判別出来ます。文字のチェックは必ず最初の文字から次の文字、次の文字へと順番に行います。最後の文字から直前の文字、という処理は出来ません。普通の半角文字とシフトJISの第2文字の判別方法は無いからです。
// 文字列の長さ(文字数)を返す ※バイト数ではない
function KLength(S:String): Integer ;
var i,j,i1:Integer ;
begin
j := 0 ;
i := 1 ;
i1 := Length(S) ;
while(i <= i1) do begin
if (Ord(S[i]) >= 128)and(Ord(S[i]) <= 159)
or(Ord(S[i]) >= 224)and(Ord(S[i]) <= 253) then
Inc(i);
Inc(i);
Inc(j);
end;
Result := j ;
end; |
次に、文字を配置する点についてですが、TextOutで指定する点は、文字の左上となっています。
しかしCADでは、下記のように9箇所の点を基準点として取りたいでしょう。
この他、2点を指定したら自動的にその2点間に文字をはめ込む機能(AutoCADでいう「左右合わせ」「フィット」)も欲しくなるでしょうし、均等文字を描くにはどうするか?とか、1行の文字列だけでなく、複数行の文字列、という機能も欲しくなるでしょう。これらを考えた上で、文字データには、どのような機能を持たねばならないのかを考え、定義付ける必要があります。
取りあえずは、回転可能な文字を作図するサンプルプログラムです。
【サンプルプログラムのソース】
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
▲PREV
▼NEXT
|