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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】引出注釈文字
今回は、引出注釈文字の作図を行うプログラムを作成しようと思います。線記号変形にはありますが、Jw_cad 標準コマンドとしては存在しないにも関わらず結構利用する機能だと思います。そのため既に色々な外部変形アプリケーションが公開されています。
 
ここでの引出注釈文字は

というように、引出開始位置の指示、引出終了位置の指示を行い、引出端点は、点マーカで作図、引出終了位置から水平線を作図して、その上に入力した文字を作図する、という基本的なパターンで作図します。軸角を考慮します。端点の点マーカ、作図する文字種、作図方向(右出し/左出し)、文字内容、文字と水平線との距離、を画面上で指示して作図を行います。
Jw_cad での文字設定内容は、図寸での指定となっていますので、図寸モードでの処理を行います。
 
点マーカデータの端点用のものは、
1blancked arrow縦2.5mm、横7.5mm
2blancked box縦横2.5mm
3blancked dot直径2.5mm
4dimension origin直径2.5mm
5filled box縦横2.5mm
6filled arrow縦2.5mm、横7.5mm
7filled dot直径2.5mm
8integral symbol弦長さ2.5mm、45°
9Open Arrow縦2.5mm、横7.5mm
10slash線長5mm、45°
11unfilled arrow縦2.5mm、横7.5mm
となっています。これは SXF仕様と同じになっています。大きさを変える場合には倍率を指定します。
 
文字内容の下の水平線の長さは、文字の長さと同じにします。文字の長さは、文字幅÷2×半角文字数+文字間隔÷2×(半角文字数−1or2)となりますが、文字間隔は、半角文字のあとは文字間隔÷2分、全角文字のあとは文字間隔分、となりますので、一番最後の文字が半角か全角かによって単純計算が出来ませんので注意します。また、制御文字や埋込文字などにはややこしくなるので対応しません。文字間隔に 0.01mmを指定している場合には Jw_cad ではプロポーショナルフォントの指定となっていますが、この対応もややこしくなるので対応しません。また、自由な任意サイズでの入力は煩雑になるので行わないようにします。
 
レイヤグループ、レイヤ、線色、線種、線幅、については現在の設定状態で作図するようにします。文字種は上記のように指定するものとしますが現在の文字種設定で作図出来るように行います。全て寸法属性として作図するようにします。
 
 
それではバッチファイルから。
p051_引出注釈文字.bat
REM p051−引出注釈文字
@echo off
REM #jww
REM #cd
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #bz
REM #1- 引出開始位置を指示して下さい。(L)free (R)Read
REM #2 引出終了位置を指示して下さい。(L)free (R)Read
REM #hr
start /w p051.exe
 
プロジェクト「p051」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p051」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
p051−引出注釈文字
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\jww\p051

メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p051」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p051」の中に「p051.dpr」として保存

Form1の画面は、取りあえずいつもと同じく、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
BorderIcons
 biMaximize
False最大化しないように
BorderStylebsSingle画面をリサイズしないように
Caption引出注釈文字タイトルバーに表示されます
ColorclWhite画面色 御自由にどうぞ
Font内
 Name
MS ゴシック プロポーショナルフォントは
文字配置調整が微妙なので
Font内
 Size
10小さいと少し見難い為
ScaledFalse 動作環境によっての文字の
大きさ変動を少し抑えられる

メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。前回及び上記で作成した「MyFunc.pas」「JwwGaibu.pas」を取り込みます。Unit1.pas の uses節に MyFunc と JwwGaibu を追加します。(※以下では全角空白を付けて桁調整等をしていますが実際は半角空白或いは無しです)
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  MyFunc, JwwGaibu ;
 
type
  TForm1 = class(TForm)
・・・
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。アイコンが Delphi6デフォルトのものになっていますので、アイコンファイルを作成してフォーム・プロジェクトで指定しておきます。

画面上に 以下のようなコンポーネントを配置し、オブジェクトインスペクタにて各プロパティ値を指定します。
RadioGroup1
Caption引出端点(&T)左上の表示内容
Columns2横項目(カラム)の数
Items









表示項目内容
ItemIndex0デフォルト指定
Label1
Caption端点倍率表示内容
Edit1
ImeModeimDisable全角文字入力出来ないように
MaxLength16最大入力可能な文字長さ
Text1文字内容(デフォルト値:1)
Label2
Caption文字種表示内容
ComboBox1
ImeModeimDisable全角文字入力出来ないように
StylecsDropDownListリスト一覧からの選択に
RadioGroup2
Caption作図方向(&D)左上の表示内容
Columns2横項目(カラム)の数
Items 右出し
左出し
表示項目内容
ItemIndex0デフォルト指定
Label3
Caption文字と水平線との距離表示内容
Edit2
ImeModeimDisable全角文字入力出来ないように
MaxLength16最大入力可能な文字長さ
Text0.5文字内容(デフォルト値:0.5)
Label4
Caption図寸mm表示内容
Label5
Caption注釈文字内容表示内容
Edit3
MaxLength255最大入力可能な文字長さ
Text 文字内容(空状態;何も無し状態)
Button1
CaptionOK(&Y)ボタン上の文字
DefaultTrue[Enter]キーを押したら[OK]
Button2
Captionキャンセル(&N)ボタン上の文字
CancelTrue[Esc]キーを押したら[キャンセル]
画面のレイアウトは下図のようにしてみました。

 
オブジェクトインスペクタにて Form1 の イベント OnShowの箇所でダブルクリック、OnCloseの箇所でダブルクリック、及び、
Button1、Button2 をダブルクリックして OnClickイベントを記述出来るようにします。
Unit1.pas
(・・・前略・・・)
type
  TForm1 = class(TForm)
 (・・・)
  private
   { Private 宣言 }
   AppPath : string ;
  public
   { Public 宣言 }
  end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
  i : integer ;
  s : string ;
begin
  Form1.Left := Mouse.CursorPos.X - Form1.Width div 2;
  Form1.Top := Mouse.CursorPos.Y - 4;
  // 初期設定
  InitJwwGaibu ;
  // プログラムのあるフォルダを取得します
  AppPath := ExtractFilePath(Application.ExeName) ;
  //
  OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
  S_Init ;
  ComboBox1.Items.Clear ;
  s := '現在の文字種(' ;
  if (JG_CurMjs = 0) then
   s := s + 'Free)'
  else
   s := s + 'No' + IntToStr(JG_CurMjs) + ')';
  ComboBox1.Items.Add(s) ;
  for i:=1 to 10 do begin
   s := 'No'+IntToStr(i)+':';
   s := s + ' W' + FloatToStr(JG_Mojisyu[i].w) ;
   s := s + ' H' + FloatToStr(JG_Mojisyu[i].h) ;
   s := s + ' D' + FloatToStr(JG_Mojisyu[i].d) ;
   ComboBox1.Items.Add(s);
  end;
  ComboBox1.ItemIndex := 0 ;
end;
 
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
  // 最終処理
  EndJwwGaibu ;
end;
 
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
var
  tm : integer ;
  tb : double ;
  hms: integer ;
  hmm: integer ;
  hxd: double ;
  hme: string ;
  an1: double ;
  hmw,hmh,hmd , hml : double ;
  hmt,hmc : integer ;
  w1,w2,w3,w4,w5,w6 : double ;
begin
  tm := RadioGroup1.ItemIndex+1;
  tb := SDbl(Edit1.Text);
  hms:= ComboBox1.ItemIndex;
  hmm:= RadioGroup2.ItemIndex;
  hxd:= SDbl(Edit2.Text);
  hme:= Edit3.Text;
  if (tb <= 0.0) then begin
   Edit1.SetFocus ;
   exit ;
  end;
  if (KTrim(hme) = '') then begin
   Edit3.SetFocus ;
   exit ;
  end;
  //
  SendMem('bz'); // 図寸モード
  S_LGrp(JG_CurLGrp);
  S_Lay( JG_CurLay );
  S_Col( JG_CurCol ,0);
  S_PCol(JG_CurCol ,0);
  S_Ltp( JG_CurLtp ,0);
  S_Wid( JG_CurWid );
  S_Font(JG_CurFont);
  // 引出線1
  S_Attr(4);
  S_Line(JG_IPoints[1].x,JG_IPoints[1].y,
  JG_IPoints[2].x,JG_IPoints[2].y );
  // 端点
  w1 := JG_IPoints[2].x - JG_IPoints[1].x ;
  w2 := JG_IPoints[2].y - JG_IPoints[1].y ;
  an1 := dAngle(w1,w2) + 180.0 ;
  if (an1 >= 360.0) then an1 := an1 - 360.0 ;
 S_Attr(4);
  S_Mark(JG_IPoints[1].x,JG_IPoints[1].y , tb,an1,tm);
  // 文字状態
  if (hms = 0) then begin
   hmt := JG_CurMjs ;
   if (hmt = 0) then begin
    hmw := JG_CurMjsW;
    hmh := JG_CurMjsH;
    hmd := JG_CurMjsD;
    hmc := JG_CurMjsC;
   end
   else begin
    if (hmt < 1)or(hmt > 10) then hmt := 1;
    hmw := JG_Mojisyu[hmt].w;
    hmh := JG_Mojisyu[hmt].h;
    hmd := JG_Mojisyu[hmt].d;
    hmc := JG_Mojisyu[hmt].col;
   end;
  end
  else begin
   hmt := hms ;
   hmw := JG_Mojisyu[hmt].w;
   hmh := JG_Mojisyu[hmt].h;
   hmd := JG_Mojisyu[hmt].d;
   hmc := JG_Mojisyu[hmt].col;
  end;
  hml := JwTextLen(hme, hmw,hmd);
  // 引出線2
  w1 := JG_IPoints[2].x ;
  w2 := JG_IPoints[2].y ;
  w5 := hml ;
  if (hmm = 1) then w5 := -w5 ;
  w3 := w1 + w5*Cos(JG_Jikukaku/180.0*Pi);
  w4 := w2 + w5*Sin(JG_Jikukaku/180.0*Pi);
  S_Attr(4);
  S_Line(w1,w2, w3,w4);
  // 文字
  w3 := 0.0 ;
  w4 := hxd ;
  if (hmm = 1) then w3 := w3 - hml ;
  dRev(w5,w6, w3,w4,0.0,0.0,JG_Jikukaku);
  w5 := w1 + w5 ;
  w6 := w2 + w6 ;
  w3 := 10.0*Cos(JG_Jikukaku/180.0*Pi);
  w4 := 10.0*Sin(JG_Jikukaku/180.0*Pi);
  S_Mjs(hmt, hmw,hmh,hmd,hmc,0);
  S_Mbs(0);
  S_Attr(4);
  S_Text(0, w5,w6, w3,w4, hme);
  //
  S_Mjs(JG_CurMjs, JG_CurMjsW,JG_CurMjsH,JG_CurMjsD,JG_CurMjsC,0);
  Close ;
end;
 
// [Cancel]
procedure TForm1.Button2Click(Sender: TObject);
begin
  Close ;
end;
 
end.
 
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p051」内に作成された「p051.exe」をフォルダ「Gapp」内へコピーします。外部変形を実行して動作確認をしてみて下さい。
 
 
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、Pcataサイトに置いておきますので必要な方はそちらからダウンロードして下さい。
 
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
M7
Jw_cad
 [BACK]
 [NEXT]
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.