|
今回は、引出注釈文字の作図を行うプログラムを作成しようと思います。線記号変形にはありますが、Jw_cad 標準コマンドとしては存在しないにも関わらず結構利用する機能だと思います。そのため既に色々な外部変形アプリケーションが公開されています。
ここでの引出注釈文字は
というように、引出開始位置の指示、引出終了位置の指示を行い、引出端点は、点マーカで作図、引出終了位置から水平線を作図して、その上に入力した文字を作図する、という基本的なパターンで作図します。軸角を考慮します。端点の点マーカ、作図する文字種、作図方向(右出し/左出し)、文字内容、文字と水平線との距離、を画面上で指示して作図を行います。
Jw_cad での文字設定内容は、図寸での指定となっていますので、図寸モードでの処理を行います。
点マーカデータの端点用のものは、
1 | blancked arrow | △ | 縦2.5mm、横7.5mm |
2 | blancked box | □ | 縦横2.5mm |
3 | blancked dot | ○ | 直径2.5mm |
4 | dimension origin | ○ | 直径2.5mm |
5 | filled box | ■ | 縦横2.5mm |
6 | filled arrow | ▲ | 縦2.5mm、横7.5mm |
7 | filled dot | ● | 直径2.5mm |
8 | integral symbol | 〜 | 弦長さ2.5mm、45° |
9 | Open Arrow | > | 縦2.5mm、横7.5mm |
10 | slash | / | 線長5mm、45° |
11 | unfilled 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 | 最大化しないように |
BorderStyle | bsSingle | 画面をリサイズしないように |
Caption | 引出注釈文字 | タイトルバーに表示されます |
Color | clWhite | 画面色 御自由にどうぞ |
Font内
Name | MS ゴシック |
プロポーショナルフォントは
文字配置調整が微妙なので |
Font内
Size | 10 | 小さいと少し見難い為 |
Scaled | False |
動作環境によっての文字の
大きさ変動を少し抑えられる |
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。前回及び上記で作成した「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) | 左上の表示内容 |
Columns | 2 | 横項目(カラム)の数 |
Items |
△
□
O
○
■
▲
●
〜
>
/
△ | 表示項目内容 |
ItemIndex | 0 | デフォルト指定 |
Label1
Edit1
ImeMode | imDisable | 全角文字入力出来ないように |
MaxLength | 16 | 最大入力可能な文字長さ |
Text | 1 | 文字内容(デフォルト値:1) |
Label2
ComboBox1
ImeMode | imDisable | 全角文字入力出来ないように |
Style | csDropDownList | リスト一覧からの選択に |
RadioGroup2
Caption | 作図方向(&D) | 左上の表示内容 |
Columns | 2 | 横項目(カラム)の数 |
Items |
右出し
左出し | 表示項目内容 |
ItemIndex | 0 | デフォルト指定 |
Label3
Edit2
ImeMode | imDisable | 全角文字入力出来ないように |
MaxLength | 16 | 最大入力可能な文字長さ |
Text | 0.5 | 文字内容(デフォルト値:0.5) |
Label4
Label5
Edit3
MaxLength | 255 | 最大入力可能な文字長さ |
Text | | 文字内容(空状態;何も無し状態) |
Button1
Caption | OK(&Y) | ボタン上の文字 |
Default | True | [Enter]キーを押したら[OK] |
Button2
Caption | キャンセル(&N) | ボタン上の文字 |
Cancel | True | [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]
|