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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CAD作ろ! いろんな図形の作図(2)
★文字
文字をキャンバスに作図する前にはまず、フォントの指定をしておきます。
with Image1.Canvas.Font do begin
 Name := 'フォント書体名';
 Height := (フォントの高さ);
(又は、Size := (フォントサイズ));
 Color := (フォントの色);
 Style := (フォントのスタイル);
end;
フォントの高さを指定すると、フォントサイズは自動的に計算されます。逆に、フォントサイズを指定すると、フォントの高さは自動的に計算されます。
フォントの高さは、ピクセル値(ドット値)で指定します。値が負の数の場合は、内部レディング(文字上下の空白部)は含まれません。値が正の数の場合は内部レディングを含めた文字の高さを表します。
フォントサイズは、ポイント数で指定します。値が負の数の場合は、内部レディングが含まれます。値が正の数の場合は内部レディングを含まれません。
正負は、フォントの高さとフォントサイズで逆になりますので注意が必要です。一般的に、ワープロソフト等では文字をポイント数で指定しますので、フォントサイズでの指定となりますが、CADソフトでは文字をmmで表す事が多いですので、フォントの高さで指定する事になるでしょう。
フォントの色は、ペンやブラシと同じ方法で指定します。
フォントのスタイルは、太字(fsBold)、斜体(fsItalic)、下線付き(fsUnderline)、打ち消し線付き(fsStrikeout)を指定する時に指定します。例えば、斜めの太字、としたい場合は、
〜.Stlye := [ fsBold , fsItalic ];
のように書きます。
 
さて、文字を描きましょう、とその前に、
作図される文字が実際どれくらいの大きさになるのかを取得するには、フォントを指定した後、
w := Image1.Canvas.TextWidth('作図したい文字');
h := Image1.Canvas.TextHeight('作図したい文字');
で作図される横幅wドット値、縦高さhドット値が分かります。
そうしましたら おもむろに、
Image1.Canvas.TextOut(X,Y,'作図したい文字');
のように指定をすると、文字を作図します。X,Yの値は、文字を作図する位置です。文字の左上点を基準として指定します。
 
なお、これでは水平の文字しか描けません。斜めに文字を傾けたい場合には、WindowsAPIを利用する必要があります。ここではまだ書きませんが、ボーランド社のサイトのFAQにもその方法が書かれていますので、今すぐ知りたいという方は、そちらを御覧下さい。
 
★ある部分の領域を別の場所へコピー
をしたい場合には、CopyRectメソッドを使います。ヘルプには
procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);
とあります。Destはコピー先の四角い範囲、Canvasはコピー元のキャンバス、Sourceはコピー元の四角い範囲、を指定します。別のImageコンポーネントを作っておいて、そちらで作業した内容を、こちらにコピーしてくるとか、も可能な訳ですね。で、
Image1.Canvas.CopyRect(Rect(0,0,100,100),Image2.Canvas,Rect(100,100,200,200));
のように書くとか、これを
var
 Src,Dst: TRect;
begin

 Src := Rect(100,100,200,200);  // コピー元
 Dst := Rect(0,0,100,100);    // コピー先
 Image1.Canvas.CopyRect(Dst,Image2.Canvas,Src);
のように分けて書いたりして下さい。
 
★画像の貼り付け
ビットマップファイル(BMP形式ファイル)、メタファイル(WMF形式ファイル)、拡張メタファイル(EMF形式ファイル)を読み込んでキャンバスに作図するには、Drawメソッドを利用します。
procedure Draw(X, Y: Integer; Graphic: TGraphic);
X,Yは、画像の左上隅を基準として、どこに作図するのかを指定します。Graphicには、画像ファイルを予め読み込ませておきます。
var
 b : TBitmap;
begin
 b := TBitmap.Create;
 try
  b.LoadFromFile('〜.bmp');
  Image1.Canvas.Draw(50,100,b);
 except
  ;
 end;
 b.Free;
end;
のようにプログラミングします。これがメタファイルの場合には、TBitmapの代わりにTMetafileを使ってください。両方あり得る場合には、TGraphicでどうぞ。
 
このDrawメソッドでは、画像を拡大・縮小・変形をさせる事は出来ません。画像を拡大・縮小・変形(縦横比率変更)をさせたい場合には、StretchDrawメソッドを利用します。
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
var
 b : TBitmap;
begin
 b := TBitmap.Create;
 try
  b.LoadFromFile('〜.bmp');
  Image1.Canvas.StretchDraw(Rect(50,30,300,200),b);
 except
  ;
 end;
 b.Free;
end;
のように作ると、画像を読み込んで、(50,30)〜(300,200)の四角い領域に、画像を変形させて貼り付け表示、という事が出来ます。
縦横比率を一定にして画像を拡大・縮小したい場合には、画像を読み込んだ後、その画像の縦・横ドットを取得し、それに定数倍率を掛けて、四角い領域を調整させると良いでしょう。
b.LoadFromFile('〜.bmp');
w := b.Width;
h := b.Height;
のようにすれば、その画像の縦・横ドット数が分かります。
 
★ベジェ曲線
ベジェ曲線をキャンバスに作図します。
procedure PolyBezier(const Points: array of TPoint);
Delphi6ヘルプより...
PolyBezierメソッドは,Pointsパラメータで指定した両端の点およびコントロールポイントを使って,立体ベジェ曲線を描画します。最初の曲線は,最初の点と 4 番目の点を結んで描画され,2 番目と 3 番目の点はコントロールポイントとして使われます。シーケンスで後続する各曲線は,必ずさらに 3 個の点を必要とします。先行する曲線の終点は次の曲線の始点として,次の 2 個の点はコントロールポイントとして,3 番目の点が終点として使われます。
Points パラメータは,ベジェ曲線を生成する場合に使われる両端の点を指定します。
との事です。
プログラムでの書き方は、書式的にはポリラインと似ているので
Image1.Canvas.PolyBezier([Point(10,10),Point(200,80),Point(100,140),Point(300,200)]);
という感じで、(10,10)→(300,200)の、コントロール点1つ目が(200,80)で、2つ目が(100,140)。3点を結ぶ場合は、
Image1.Canvas.PolyBezier([Point(10,10),Point(200,80),Point(100,140),Point(300,200),Point(450,230),Point(350,260),Point(500,300)]);
で(10,10)→(300,200)→(500,300)の、コントロール点が(200,80)&(100,140)と、(450,230)&(350,260)。
 
勿論、ベジェ曲線を作図したい場合には、このメソッドを使うのも良いですが、幾つかの注意点があります。
@仮に他のCADへデータを渡す場合、DXFを利用する際、SPLINE要素で出力するとなると、ベジェ曲線を有理スプライン曲線に変換する作業が必要になります。また、円弧や線分、ポリライン要素に置き換える際には、ベジェ曲線上の各点を取得する事が出来る必要があるでしょう。
ACADに対応させたとして、作図の際、画面を拡大させると、クリッピング処理(※後述予定)を行う必要がありますが、ベジェ曲線をクリッピング処理する事が出来る必要があるでしょう。
つまりは、ベジェ曲線が、どのような曲線なのかを知らねばなりません。
 
なお、お絵描きソフトや、画面拡大の制限(あまり拡大出来ないように)、他のCAD等は無視、するのであれば、勿論、このメソッドを有効利用出来るでしょう。
 
どのようにするのかは、全て、あなた次第です。
 
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
 ▲PREV
 ▼NEXT
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.