|
今回は、補助線の作図を行う外部変形アプリケーションを作っていこうと思います。
◆補助線って何?
作図する際に補助的に作図する線分等の事です。ある線分の延長線だったり、目盛(グリッド)のように位置決めをするものだったり、交点等を出すためのものだったり等、使い方は色々ですが、補助線は印刷されない、という事も重要です。まぁ、印刷されないからといって作図したものをずっとほったらかしにするっていうのも何ですけれど。(データとしては残りますので)
◆Jw_cadでの補助線の扱い
線色に「補助線色」というものがあります。これで作図します。同様に線種にも「補助線種」というものがありますが、点や文字には線種はありませんし、短い補助線種の線が印刷されてしまうという件もありますので線種は任意とし、線色を補助線色で作図する、という事にします。また、補助線はある特定のレイヤグループ・レイヤにまとめて入れる事が多いので、その設定も行うようにします。
Jw_cadでは、補助線作図を行うコマンド、というものはありません。線色や線種を補助線色・補助線種にして、各作図コマンドを使う事で補助線作図を行います。
◆
今回は、作図の際のパラメータ入力画面と設定画面をページ切替出来るようにして1つのFormで行うようにします。補助線は画面一杯一杯に作図する場合が多いですが、用紙枠でクリッピング(用紙枠内に収まるような調整)は行わず、長い線分を作図するという事にします。まずは2点指定・水平線・垂直線・角度線・平行線・直交線・傾き線・設定から。
それではバッチファイルです。以前の「線の作図」とは少し変更していますので御注意下さい。
|
p039_補助線の作図.bat |
REM p039:補助線の作図
@echo off
GOTO EXE-%1
REM
REM ----- 1)2点指定 実行プログラム -----
:EXE-1
start /w p039.exe /R1
GOTO END
REM
REM ----- 2)水平線 実行プログラム -----
:EXE-2
start /w p039.exe /R2
GOTO END
REM
REM ----- 3)垂直線 実行プログラム -----
:EXE-3
start /w p039.exe /R3
GOTO END
REM
REM ----- 4)角度線 実行プログラム -----
:EXE-4
start /w p039.exe /R4 %2
GOTO END
REM
REM ----- 5)平行線 実行プログラム -----
:EXE-5
start /w p039.exe /R5
GOTO END
REM
REM ----- 6)直交線 実行プログラム -----
:EXE-6
start /w p039.exe /R6
GOTO END
REM
REM ----- 7)傾き線 実行プログラム -----
:EXE-7
start /w p039.exe /R7 %2
GOTO END
REM
REM ----- 8)その他 -----
:EXE-8
REM
GOTO END
REM
REM ----- 9)設定 実行プログラム -----
:EXE-9
start /w p039.exe
GOTO END
REM
REM
REM ----- ----- ----- ----- ----- -----
REM #jww
REM #cd
REM #hc 補助線を作図する外部変形です。機能を選択して下さい(1〜9)
REM #hm補助線の作図|1)2点指定|2)水平線|3)垂直線|4)角度線|5)平行線|6)直交線|7)傾き線|##|9)設定|
REM
REM #:1 -----2点指定-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1-始点を指示して下さい。(L)free (R)Read
REM #2終点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:2 -----水平線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:3 -----垂直線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:4 -----角度線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #c 角度を入力して下さい。[°]
REM #1 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:5 -----平行線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1ln 基準線を指示して下さい。
REM #2 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:6 -----直交線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1ln 基準線を指示して下さい。
REM #2 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #hr
REM #e
REM
REM #:7 -----傾き線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #c 傾き角度を入力して下さい。[°]
REM #1ln 基準線を指示して下さい。
REM #2 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:9 -----設定-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #hr
REM #e
REM
:END
REM 終了 |
|
プロジェクト「p039」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p039」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
タイトル | p039−補助線の作図 |
[ディレクトリ/条件]頁
パス及びディレクトリ | C:\DelphiProgram\jww\p039 |
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p039」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p039」の中に「p039.dpr」として保存
◆
Form1の画面は、取りあえずいつもと同じく、大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
BorderIcons
biMaximize | False | 最大化しないように |
BorderStyle | bsSingle | 画面をリサイズしないように |
Caption | 補助線の作図 | タイトルバーに表示されます |
Color | clSkyBlue | お好みでどうぞ |
Font内
Name | MS ゴシック |
プロポーショナルフォントは
文字配置調整が微妙なので |
Font内
Size | 10 | 小さいと少し見難い為 |
Scaled | False |
動作環境によっての文字の
大きさ変動を少し抑えられる |
メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
前回作成した「MyFunc.pas」「JwwGaibu.pas」を取り込んでみます。この2つのファイルをエクスプローラで「C:\DelphiProgram\jww\p038」から「C:\DelphiProgram\jww\p039」へコピーします。(※移動しないよう注意)
メニュー「プロジェクト」→「プロジェクトに追加」
を行い「C:\DelphiProgram\jww\p039」の中の「MyFunc.pas」と「JwwGaibu.pas」を指定します。すると、コード画面左側のプロジェクトマネージャに「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デフォルトのものになっていますので、メニュー「ツール」→「イメージエディタ」を実行し、そのメニュー「ファイル」→「新規作成」→「アイコンファイル」を実行し、16×16・16色のアイコンを作成します。(32×32でも構いませんし他のツールで作成するのでも構いません)「C:\DelphiProgram\jww\p039」の中に「Icon1.ico」として保存します。保存できたらイメージエディタを終了します。
メニュー「プロジェクト」→「オプション」を実行し、
[アプリケーション]頁の中の[アイコンの読み込み]ボタンをクリックし、「C:\DelphiProgram\jww\p039\Icon1.ico」を指定します。[OK]ボタンをクリックしてプロジェクトオプション画面を閉じます。
オブジェクトインスペクタにて、Form1 の Icon プロパティの入力欄右端の[…]をクリックして、[読み込み]ボタンをクリックし、「Icon1」を指定して、[OK]ボタンをクリックします。
◆
ページ切替を出来るようにするため、[Win32]内の PageControl コンポーネントを配置します。TabControl コンポーネントはページ毎に異なるコンポーネントの配置が出来ませんのでここでは使用しません。オブジェクトインスペクタで PageControl1のプロパティを変更します。
|
Align | alTop | 画面の下にボタンを配置するので alClient には しません |
|
PageControl1 上で右クリックを行い、表示されるポップアップメニューの「ページ新規作成」を2回行います。オブジェクトインスペクタで TabSheet1 の Caption プロパティを「作図(&1)」、TabSheet2 の Caption プロパティを「設定(&2)」としておきます。「作図」の方はそのままにしておき、「設定」ページの中身をまず作ります。その前に、Form1 の画面下部分に、ボタンを2つ配置し、それぞれ以下のようにプロパティを指定します。
|
Button1
Caption | OK(&Y) | ボタン上の文字 |
Default | True | [Enter]キーを押したら[OK] |
Button2
Caption | キャンセル(&N) | ボタン上の文字 |
Cancel | True | [Esc]キーを押したら[キャンセル] |
|
オブジェクトインスペクタにて Form1 の イベント OnShowの箇所でダブルクリック、OnCloseの箇所でダブルクリックし、取りあえず下記のように追記します。
|
Unit1.pas |
(・・・前略・・・)
type
TForm1 = class(TForm)
(・・・)
private
{ Private 宣言 }
AppPath : string ;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// 起動時
procedure TForm1.FormShow(Sender: TObject);
begin
if (ParamCount >= 1) then
Form1.WindowState := wsMinimized ;
// 初期設定
InitJwwGaibu ;
// プログラムのあるフォルダを取得します
AppPath := ExtractFilePath(Application.ExeName) ;
// JWC_TEMP.TXTを開きます
OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
end;
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (ParamCount >= 1) then begin
// JWC_TEMP.TXTを保存します
SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
end;
// 最終処理
EndJwwGaibu ;
end;
end. |
|
[設定]ページの中に コンポーネントを配置していきます。[Standard]内の Label を4つ、ComboBox を4つ配置します。Label の Captionプロパティはそれぞれ「レイヤグループ」「レイヤ」「線 種」「線 幅」としています。ComboBoxのプロパティについては下記。ComboBox1・2・3についてはプログラムで内容を入れる事にします。
|
ComboBox1、ComboBox2、ComboBox3
ImeMode | imDisable | 全角入力出来ないように |
Style | csDropDownList | キー入力せず項目選択のみ |
ComboBox4
ImeMode | imDisable | 全角入力出来ないように |
Items | 任意 |
よく利用する線幅値を
1行1値ずつ入力して下さい |
Style | csDropDown | キー入力と項目選択を行いたい |
|
なお、線の作図のような ListBox は配置していません。補助線を色々使い分けたいというケースは余り無いと思われる為です。もし必要な方は独自に追加してみて下さい。
Button1、Button2をダブルクリックして OnClickイベントを記述出来るようにします。取りあえず。
|
Unit1.pas |
(・・・前略・・・)
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
begin
Close ;
end;
// [Cancel]
procedure TForm1.Button2Click(Sender: TObject);
begin
Close ;
end;
end. |
|
設定値を登録出来るようにします。
|
Unit1.pas |
(・・・前略・・・)
type
TForm1 = class(TForm)
(・・・)
private
{ Private 宣言 }
AppPath : string ;
lgrp,lay,ltp,wid : integer ;
procedure OpenDatFile ;
procedure SaveDatFile ;
public
{ Public 宣言 }
end;
const
SENLEN = 100000000.0 ; // 補助線の長さ
var
Form1: TForm1;
implementation
{$R *.dfm}
// データファイルを読み込む
procedure TForm1.OpenDatFile ;
var
fn: string ;
F : TextFile ;
s : string ;
begin
fn := ChangeFileExt(Application.ExeName,'.dat') ;
lgrp:=-1;
lay :=-1;
ltp := 0;
wid :=-1;
// 読み込み
if not(FileExists(fn)) then exit;
try
AssignFile(F, fn);
FileMode := 0;
Reset(F);
ReadLn(F, s); lgrp:= SInt(s);
ReadLn(F, s); lay := SInt(s);
ReadLn(F, s); ltp := SInt(s);
ReadLn(F, s); wid := SInt(s);
CloseFile(F);
except
CloseFile(F);
end;
end;
// データファイルを保存する
procedure TForm1.SaveDatFile ;
var
fn: string ;
F : TextFile ;
begin
fn := ChangeFileExt(Application.ExeName,'.dat') ;
try
AssignFile(F, fn);
ReWrite(F);
WriteLn(F, IntToStr(lgrp));
WriteLn(F, IntToStr(lay));
WriteLn(F, IntToStr(ltp));
WriteLn(F, IntToStr(wid));
CloseFile(F);
except
CloseFile(F);
if FileExists(fn) then
DeleteFile(fn);
end;
end;
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
i : integer ;
w1,w2,w3,w4,w5,w7,w8,w9 : double ;
begin
if (ParamCount >= 1) then
Form1.WindowState := wsMinimized ;
// 初期設定
InitJwwGaibu ;
// プログラムのあるフォルダを取得します
AppPath := ExtractFilePath(Application.ExeName) ;
// JWC_TEMP.TXTを開きます
OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
//
OpenDatFile ;
if (ParamCount >= 1) then begin
S_Init ; // 初期化
if (lgrp = -1) then // レイヤグループ
S_LGrp(JG_CurLgrp)
else
S_LGrp(lgrp);
if (lay = -1) then // レイヤ
S_Lay(JG_CurLay)
else
S_Lay(lay);
S_Col(9,0); // 線色=補助線=9
S_Ltp(ltp,1); // 線種
S_Wid(wid); // 線幅
//
if (ParamStr(1) = '/R1') then begin
// 2点指定
w1 := JG_IPoints[1].x ;
w2 := JG_IPoints[1].y ;
w3 := JG_IPoints[2].x ;
w4 := JG_IPoints[2].y ;
w5 := Angle(w3-w1,w4-w2); // 2点の傾き角度[rad]
w7 := (w1+w3)/2.0 ; // 2点の中点
w8 := (w2+w4)/2.0 ;
w1 := w7 + SENLEN/2.0*Cos(w5);
w2 := w8 + SENLEN/2.0*Sin(w5);
w3 := w7 + SENLEN/2.0*Cos(w5+Pi);
w4 := w8 + SENLEN/2.0*Sin(w5+Pi);
S_Line(w1,w2, w3,w4);
end
else if (ParamStr(1) = '/R2')
or(ParamStr(1) = '/R3')
or(ParamStr(1) = '/R4') then begin
// 水平線・垂直線・角度線
w9 := JG_Jikukaku ;
if (ParamStr(1) = '/R3') then w9 := w9 + 90.0
else if (ParamStr(1) = '/R4') then w9 := w9 + SDbl(ParamStr(2)) ;
w5 := w9/180.0*Pi ;
w7 := JG_IPoints[1].x ;
w8 := JG_IPoints[1].y ;
w1 := w7 + SENLEN/2.0*Cos(w5);
w2 := w8 + SENLEN/2.0*Sin(w5);
w3 := w7 + SENLEN/2.0*Cos(w5+Pi);
w4 := w8 + SENLEN/2.0*Sin(w5+Pi);
S_Line(w1,w2, w3,w4);
end
else if (ParamStr(1) = '/R5')
or(ParamStr(1) = '/R6')
or(ParamStr(1) = '/R7') then begin
// 平行線・直交線・傾き線
if (JW_EntLineN = 0) then Close ;
with JW_EntLine[0] do
w9 := Angle(x2-x1,y2-y1)*180.0/Pi;
if (w9 >= 180.0) then
w9 := w9 - 180.0;
if (ParamStr(1) = '/R6') then w9 := w9 + 90.0
else if (ParamStr(1) = '/R7') then w9 := w9 + SDbl(ParamStr(2)) ;
w5 := w9/180.0*Pi ;
w7 := JG_IPoints[2].x ;
w8 := JG_IPoints[2].y ;
w1 := w7 + SENLEN/2.0*Cos(w5);
w2 := w8 + SENLEN/2.0*Sin(w5);
w3 := w7 + SENLEN/2.0*Cos(w5+Pi);
w4 := w8 + SENLEN/2.0*Sin(w5+Pi);
S_Line(w1,w2, w3,w4);
end;
if (lgrp <> -1) then
S_LGrp(JG_CurLgrp); // レイヤグループを戻す
if (lay <> -1) then
S_Lay(JG_CurLay); // レイヤを戻す
SaveDatFile ;
Close ;
end
else begin
// 設定
Form1.Left := Mouse.CursorPos.X - Form1.Width div 2;
Form1.Top := Mouse.CursorPos.Y - Form1.Height div 2;
PageControl1.ActivePage := TabSheet2 ; // [設定]
//
ComboBox1.Items.Clear ;
ComboBox1.Items.Add('現在レイヤグループ');
for i:=0 to 15 do
ComboBox1.Items.Add('レイヤグループ['+IntToHex(i,1)+']');
ComboBox2.Items.Clear ;
ComboBox2.Items.Add('現在レイヤ');
for i:=0 to 15 do
ComboBox2.Items.Add('レイヤ('+IntToHex(i,1)+')');
ComboBox3.Items.Clear ;
ComboBox3.Items.Add('現在線種');
for i:=1 to 9 do
ComboBox3.Items.Add('線種'+IntToStr(i));
for i:=1 to 5 do
ComboBox3.Items.Add('ランダム線'+IntToStr(i));
for i:=1 to 4 do
ComboBox3.Items.Add('倍長線種'+IntToStr(i));
for i:=1 to 32 do
ComboBox3.Items.Add('SXF-'+IntToStr(i));
ComboBox4.Text := '' ;
//
ComboBox1.ItemIndex := lgrp + 1 ;
ComboBox2.ItemIndex := lay + 1 ;
ComboBox3.ItemIndex := ltp ;
if (wid >= 0) then
ComboBox4.Text := IntToStr(wid);
end;
end;
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if (ParamCount >= 1) then begin
// JWC_TEMP.TXTを保存します
SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
end;
// 最終処理
EndJwwGaibu ;
end;
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
begin
lgrp:= ComboBox1.ItemIndex - 1 ;
lay := ComboBox2.ItemIndex - 1 ;
ltp := ComboBox3.ItemIndex ;
if (ComboBox4.Text = '') then
wid := -1
else
wid := SInt(ComboBox4.Text);
SaveDatFile ;
Close ;
end;
// [Cancel]
procedure TForm1.Button2Click(Sender: TObject);
begin
Close ;
end;
end. |
|
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p039」内に作成された「p039.exe」をフォルダ「Gapp」内へコピーします。外部変形を実行して動作確認をしてみて下さい。
◆
次に、補助線色による点の作図と、補助線色による円の作図も行いたいとします。もう1つバッチファイルを用意し、バッチファイルの移行を出来るようにします。
|
p039_補助線の作図.bat |
REM p039:補助線の作図
@echo off
GOTO EXE-%1
REM
REM ----- 1)2点指定 実行プログラム -----
:EXE-1
start /w p039.exe /R1
GOTO END
REM
REM ----- 2)水平線 実行プログラム -----
:EXE-2
start /w p039.exe /R2
GOTO END
REM
REM ----- 3)垂直線 実行プログラム -----
:EXE-3
start /w p039.exe /R3
GOTO END
REM
REM ----- 4)角度線 実行プログラム -----
:EXE-4
start /w p039.exe /R4 %2
GOTO END
REM
REM ----- 5)平行線 実行プログラム -----
:EXE-5
start /w p039.exe /R5
GOTO END
REM
REM ----- 6)直交線 実行プログラム -----
:EXE-6
start /w p039.exe /R6
GOTO END
REM
REM ----- 7)傾き線 実行プログラム -----
:EXE-7
start /w p039.exe /R7 %2
GOTO END
REM
REM ----- 8)その他 -----
:EXE-8
REM
GOTO END
REM
REM ----- 9)設定 実行プログラム -----
:EXE-9
start /w p039.exe
GOTO END
REM
REM
REM ----- ----- ----- ----- ----- -----
REM #jww
REM #cd
REM #hc 補助線を作図する外部変形です。機能を選択して下さい(1〜9)
REM #hm補助線の作図|1)2点指定|2)水平線|3)垂直線|4)角度線|5)平行線|6)直交線|7)傾き線|8)その他|9)設定|
REM
REM #:1 -----2点指定-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1-始点を指示して下さい。(L)free (R)Read
REM #2終点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:2 -----水平線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:3 -----垂直線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:4 -----角度線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #c 角度を入力して下さい。[°]
REM #1 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:5 -----平行線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1ln 基準線を指示して下さい。
REM #2 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:6 -----直交線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1ln 基準線を指示して下さい。
REM #2 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #hr
REM #e
REM
REM #:7 -----傾き線-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #c 傾き角度を入力して下さい。[°]
REM #1ln 基準線を指示して下さい。
REM #2 通過点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:8 -----その他-----
REM #h/p039a_補助線の作図.bat
REM #e
REM
REM #:9 -----設定-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #hr
REM #e
REM
:END
REM 終了 |
p039a_補助線の作図.bat |
REM p039a:補助線の作図
@echo off
GOTO EXE-%1
REM
REM ----- 1)点 実行プログラム -----
:EXE-1
start /w p039.exe /R8
GOTO END
REM
REM ----- 2)円1 実行プログラム -----
:EXE-2
start /w p039.exe /R9
GOTO END
REM
REM ----- 3)円2 実行プログラム -----
:EXE-3
start /w p039.exe /R10
GOTO END
REM
REM ----- 9)戻る -----
:EXE-9
REM
GOTO END
REM
REM
REM ----- ----- ----- ----- ----- -----
REM #jww
REM #cd
REM #hc 補助線を作図する外部変形です。機能を選択して下さい(1〜9)
REM #hm補助線の作図|1)点|2)円1|3)円2|##|##|##|##|##|9)戻る|
REM
REM #:1 -----点-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 配置点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:2 -----円1-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1- 中心点を指示して下さい。(L)free (R)Read
REM #2 半径指示点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:3 -----円2-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 中心点を指示して下さい。(L)free (R)Read
REM #hr
REM #e
REM
REM #:9 -----戻る-----
REM #h/p039_補助線の作図.bat
REM #e
REM
:END
REM 終了 |
|
点は配置点を指定するのみ、円1は中心点と半径指定点を指定しますので良いとして、円2作図では、半径・偏平率・傾き角度(楕円の場合)の入力を必要としますが、角度線のような「REM #c」ではなく、プログラム画面にて行います。[作図]ページ内に LabelコンポーネントとEditコンポーネントを配置し、プログラム内で内容を変えます。そうすれば他の作図コマンドとも共用が可能です。不要なものは見えないように Visibleプロパティを Falseにすれば良いでしょう。設定側と間違えないように Nameプロパティを”LabelA1”のように変えておきます。Editコンポーネントの ImeModeプロパティは「imDisable」にしておきます。
|
Unit1.pas |
(・・・前略・・・)
type
TForm1 = class(TForm)
(・・・)
private
{ Private 宣言 }
AppPath : string ;
lgrp,lay,ltp,wid : integer ;
c10_r,c10_h,c10_a : double ;
procedure OpenDatFile ;
(・・・)
// データファイルを読み込む
procedure TForm1.OpenDatFile ;
(・・・)
wid :=-1;
c10_r := 100.0;
c10_h := 1.0;
c10_a := 0.0;
(・・・)
ReadLn(F, s); wid := SInt(s);
ReadLn(F, s); c10_r:= SDbl(s);
ReadLn(F, s); c10_h:= SDbl(s);
ReadLn(F, s); c10_a:= SDbl(s);
CloseFile(F);
(・・・)
// データファイルを保存する
procedure TForm1.SaveDatFile ;
(・・・)
WriteLn(F, IntToStr(wid));
WriteLn(F, FloatToStr(c10_r));
WriteLn(F, FloatToStr(c10_h));
WriteLn(F, FloatToStr(c10_a));
CloseFile(F);
(・・・)
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
i : integer ;
w1,w2,w3,w4,w5,w7,w8,w9 : double ;
sflag : Boolean ;
begin
(・・・)
OpenDatFile ;
sflag := False ;
if (ParamCount >= 1) then begin
(・・・)
else if (ParamStr(1) = '/R5')
or(ParamStr(1) = '/R6')
or(ParamStr(1) = '/R7') then begin
(・・・)
end
else if (ParamStr(1) = '/R8') then begin
// 点
w1 := JG_IPoints[1].x ;
w2 := JG_IPoints[1].y ;
S_PCol(9,0);
S_Ten(w1,w2);
end
else if (ParamStr(1) = '/R9') then begin
// 円1
w1 := JG_IPoints[1].x ;
w2 := JG_IPoints[1].y ;
w3 := JG_IPoints[2].x ;
w4 := JG_IPoints[2].y ;
w5 := Dist(w1,w2,w3,w4);
S_Circle(w1,w2,w5);
end;
end
else begin
sflag := True ;
PageControl1.ActivePage := TabSheet2 ; // [設定]
end;
//
if (ParamCount >= 1) then begin
LabelA1.Visible := False; EditA1.Visible := False;
LabelA2.Visible := False; EditA2.Visible := False;
LabelA3.Visible := False; EditA3.Visible := False;
if (ParamStr(1) = '/R10') then begin
// 円2
LabelA1.Visible := True; EditA1.Visible := True;
LabelA2.Visible := True; EditA2.Visible := True;
LabelA3.Visible := True; EditA3.Visible := True;
LabelA1.Caption := '半 径';
LabelA2.Caption := '偏平率';
LabelA3.Caption := '傾き角度[°]';
EditA1.Text := FloatToStr(c10_r);
EditA2.Text := FloatToStr(c10_h);
EditA3.Text := FloatToStr(c10_a);
PageControl1.ActivePage := TabSheet1 ;
sflag := True ;
end;
end;
//
if (sflag) then begin
// 設定
Form1.Left := Mouse.CursorPos.X - Form1.Width div 2;
Form1.Top := Mouse.CursorPos.Y - Form1.Height div 2;
Form1.WindowState := wsNormal;
//
ComboBox1.Items.Clear ;
ComboBox1.Items.Add('現在レイヤグループ');
for i:=0 to 15 do
ComboBox1.Items.Add('レイヤグループ['+IntToHex(i,1)+']');
ComboBox2.Items.Clear ;
ComboBox2.Items.Add('現在レイヤ');
for i:=0 to 15 do
ComboBox2.Items.Add('レイヤ('+IntToHex(i,1)+')');
ComboBox3.Items.Clear ;
ComboBox3.Items.Add('現在線種');
for i:=1 to 9 do
ComboBox3.Items.Add('線種'+IntToStr(i));
for i:=1 to 5 do
ComboBox3.Items.Add('ランダム線'+IntToStr(i));
for i:=1 to 4 do
ComboBox3.Items.Add('倍長線種'+IntToStr(i));
for i:=1 to 32 do
ComboBox3.Items.Add('SXF-'+IntToStr(i));
ComboBox4.Text := '' ;
//
ComboBox1.ItemIndex := lgrp + 1 ;
ComboBox2.ItemIndex := lay + 1 ;
ComboBox3.ItemIndex := ltp ;
if (wid >= 0) then
ComboBox4.Text := IntToStr(wid);
end
else begin
if (lgrp <> -1) then
S_LGrp(JG_CurLgrp); // レイヤグループを戻す
if (lay <> -1) then
S_Lay(JG_CurLay); // レイヤを戻す
SaveDatFile ;
Close ;
end;
end;
(・・・)
// [OK]
procedure TForm1.Button1Click(Sender: TObject);
var
flag : Boolean ;
w1,w2,w3 : double ;
begin
lgrp:= ComboBox1.ItemIndex - 1 ;
lay := ComboBox2.ItemIndex - 1 ;
ltp := ComboBox3.ItemIndex ;
if (ComboBox4.Text = '') then
wid := -1
else
wid := SInt(ComboBox4.Text);
//
if (ParamCount >= 1) then begin
flag := False;
if (ParamStr(1) = '/R10') then begin
c10_r := SDbl(EditA1.Text);
c10_h := SDbl(EditA2.Text);
c10_a := SDbl(EditA3.Text);
if (c10_r <= _LIMIT) then exit;
if (c10_h <= _LIMIT) then exit;
while (c10_a < 0.0) do c10_a := c10_a + 360.0;
while (c10_a >= 360.0) do c10_a := c10_a - 360.0;
flag := True;
end;
//
if (flag) then begin
if (ParamStr(1) = '/R10') then begin
w1 := JG_IPoints[1].x ;
w2 := JG_IPoints[1].y ;
if (Abs(c10_h-1.0) <= _LIMIT) then begin
S_Circle(w1,w2,c10_r);
end
else begin
w3 := JG_Jikukaku + c10_a ;
S_Arc(w1,w2,c10_r,0.0,0.0,c10_h,w3);
end;
end;
if (lgrp <> -1) then
S_LGrp(JG_CurLgrp); // レイヤグループを戻す
if (lay <> -1) then
S_Lay(JG_CurLay); // レイヤを戻す
end;
end;
SaveDatFile ;
Close ;
end;
(・・・後略・・・) |
|
少しややこしくなってしまいましたが、円2の場合は、半径・偏平率・傾き角度を入力せねばならないため、OnShow内で 生成・終了を行う事が出来ません。ですので、R10オプションの場合は別処理になるため、そのためのフラグ変数を用意して使用したりしています。
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p039」内に作成された「p039.exe」をフォルダ「Gapp」内へコピーします。外部変形を実行して動作確認をしてみて下さい。
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、Pcataサイトに置いておきますので必要な方はそちらからダウンロードして下さい。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
M7
Jw_cad
[BACK]
[NEXT]
|