|  
  
  
   
   
   
   
   
   
  | 
| 今回は、補助線の作図を行う外部変形アプリケーションを作っていこうと思います。 
 ◆補助線って何?
 作図する際に補助的に作図する線分等の事です。ある線分の延長線だったり、目盛(グリッド)のように位置決めをするものだったり、交点等を出すためのものだったり等、使い方は色々ですが、補助線は印刷されない、という事も重要です。まぁ、印刷されないからといって作図したものをずっとほったらかしにするっていうのも何ですけれど。(データとしては残りますので)
 
 ◆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のプロパティを変更します。
 
 
PageControl1 上で右クリックを行い、表示されるポップアップメニューの「ページ新規作成」を2回行います。オブジェクトインスペクタで TabSheet1 の Caption プロパティを「作図(&1)」、TabSheet2 の Caption プロパティを「設定(&2)」としておきます。「作図」の方はそのままにしておき、「設定」ページの中身をまず作ります。その前に、Form1 の画面下部分に、ボタンを2つ配置し、それぞれ以下のようにプロパティを指定します。
|  | 
| Align | alTop | 画面の下にボタンを配置するので alClient には しません |  |  
 
オブジェクトインスペクタにて Form1 の イベント OnShowの箇所でダブルクリック、OnCloseの箇所でダブルクリックし、取りあえず下記のように追記します。
|  | Button1 
 
Button2
| Caption | OK(&Y) | ボタン上の文字 |  
| Default | True | [Enter]キーを押したら[OK] |  
 
| Caption | キャンセル(&N) | ボタン上の文字 |  
| Cancel | True | [Esc]キーを押したら[キャンセル] |  |  
 
[設定]ページの中に コンポーネントを配置していきます。[Standard]内の Label を4つ、ComboBox を4つ配置します。Label の Captionプロパティはそれぞれ「レイヤグループ」「レイヤ」「線 種」「線 幅」としています。ComboBoxのプロパティについては下記。ComboBox1・2・3についてはプログラムで内容を入れる事にします。
|  | 
| 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.
 |  |  
 
|  | ComboBox1、ComboBox2、ComboBox3 
 
ComboBox4
| ImeMode | imDisable | 全角入力出来ないように |  
| Style | csDropDownList | キー入力せず項目選択のみ |  
 
| 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つバッチファイルを用意し、バッチファイルの移行を出来るようにします。
 
 
点は配置点を指定するのみ、円1は中心点と半径指定点を指定しますので良いとして、円2作図では、半径・偏平率・傾き角度(楕円の場合)の入力を必要としますが、角度線のような「REM #c」ではなく、プログラム画面にて行います。[作図]ページ内に LabelコンポーネントとEditコンポーネントを配置し、プログラム内で内容を変えます。そうすれば他の作図コマンドとも共用が可能です。不要なものは見えないように Visibleプロパティを Falseにすれば良いでしょう。設定側と間違えないように Nameプロパティを”LabelA1”のように変えておきます。Editコンポーネントの ImeModeプロパティは「imDisable」にしておきます。
|  | 
| 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 終了
 |  |  
 
少しややこしくなってしまいましたが、円2の場合は、半径・偏平率・傾き角度を入力せねばならないため、OnShow内で 生成・終了を行う事が出来ません。ですので、R10オプションの場合は別処理になるため、そのためのフラグ変数を用意して使用したりしています。
|  | 
| 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;
 (・・・後略・・・)
 |  |  
 
 メニュー「ファイル」→「すべて保存」を行い
 メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
 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]
 
 |