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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CAD作ろ! 文字を描く(1)
文字を描くには、「いろんな図形の作図(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
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.