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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】線の作図(1)
前回の外部変形コマンドラインでは、WindowsXpで動作した場合に画面に線が表示され確認しながら作図、という事が標準で出来ない事が後で分かりました。Windows2000互換モードにすると出来るようになりますが今ひとつ納得出来ません。ですので座標入力に関しては他の方法を考えてみます。
 
以前作成した「p032_2点間線」を拡張してここに座標入力が出来るよう追加してみます。そこで入力画面ですが、既に設定画面があります。専用に単独画面を用意するとなるともう1つプログラムを用意しないといけない=手間も掛かるし、ファイルサイズも大きくなってしまいます。いくら高速インターネットが普及したといってもファイルサイズはなるべく抑えたい。設定画面と切替表示にするという案は、やはり今ひとつな感じがありますし、画面を、入力画面←メイン画面→設定画面と3画面方式にするというような手法もありますがこれもやや煩雑です。
 
ですのでここはオーソドックスに、バッチファイル仕様の「実行時の起動オプションの指定」を考えてみます。
「REM #c」
「REM #f」
◎実行時の起動オプションの指定
10回まで実行時の起動オプション指定が可能
 #f は IMEがONになる
REM #c****
 ****:コメント表示
REM #c****/_**
 /_**:**が入力オプションの前に表示される
テストで Delphiで起動オプションを表示するだけの簡単なプログラムを作ってみます。Form1 に Memoコンポーネントを貼り付けて 全画面に表示するようにして、Form1のOnShowイベントで
procedure TForm1.FormShow(Sender: TObject);
var
 i : integer ;
begin
 Memo1.Lines.Clear ;
 Memo1.Lines.Add('パラメータ数:'+IntToStr(ParamCount));
 for i:=1 to ParamCount do begin
  Memo1.Lines.Add('['+IntToStr(i)+']:'+ParamStr(i));
 end;
end;
とするだけの簡単なものです。また簡単なバッチファイルで確認してみます。
REM テスト
REM #jww
REM #cd
REM #c入力=
REM #e
start /w test01.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
として外部変形を実行します。すると、

というように右上に入力欄が表示されます。ここで、「12345」と入力すると、

という具合に、起動オプション「%1」には「12345」が受け渡された事が分かります。次にバッチファイルを
REM テスト
REM #jww
REM #cd
REM #c入力=/_ABC
REM #e
start /w test01.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
として、外部変形を実行します。すると、

と表示され、「123」と入力すると、

となります。入力した内容の前に「ABC」が付加されます。但し、これだと分かり難いかもしれませんので、
「REM #c&&」◎オプションの確認・追加を指定
という指定方法があります。これを先のバッチファイルに追加してみます。
REM テスト
REM #jww
REM #cd
REM #c入力=/_ABC
REM #c&&
REM #e
start /w test01.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
外部変形を実行します。

と表示され、「123」と入力すると、

となって入力待ち状態となります。
そのまま[Enter]キーを押すと

となります。
 
ここで、座標入力として「X,Y」と入力するとします。するとコマンドプロンプト(MS-DOSプロンプト)は「,」を区切り記号として認識しますので、例えば「100,200」と入力した場合は、「100」「200」という2つの起動オプションを渡した事になりますので注意して下さい。
 
 
それでは「p032_2点間線.bat」を書き換えて「p035_線の作図.bat」として保存します。
p035_線の作図.bat
REM p035:線の作図
@echo off
GOTO EXE-%1
REM
REM ----- 1)2点指定 実行プログラム -----
:EXE-1
start /w p035.exe /R0
GOTO END
REM
REM ----- 2)複数点指定 実行プログラム -----
:EXE-2
start /w p035.exe /R1
GOTO END
REM
REM ----- 3)終点指定 実行プログラム -----
:EXE-3
start /w p035.exe /R2
GOTO END
REM
REM ----- 4)座標入力 実行プログラム -----
:EXE-4
start /w p035.exe /R3 %2 %3 %4 %5
GOTO END
REM
REM ----- 5)設定 実行プログラム -----
:EXE-5
start /w p035.exe
GOTO END
REM
REM
REM ----- ----- ----- ----- ----- -----
REM #jww
REM #cd
REM #hc 線を作図する外部変形です。機能を選択して下さい(1〜5)
REM #hm2点間線|1)2点指定|2)複数点指定|3)終点指定|4)座標入力|5)設定|
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-%d点を指示して下さい。(L)free (R)Read
REM #99#
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 始点座標を入力して下さい。(X座標,Y座標)
REM #c 終点座標を入力して下さい。(X座標,Y座標)
REM #hr
REM #e
REM
REM #:5 -----設定-----
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #hr
REM #e
REM
:END
REM 終了
項目選択で「%1」が使われますので、x1,y1,x2,y2は、%2,%3,%4,%5 となります。プログラム p035.exe 側では、第1引数は「/R3」第2〜5引数が各座標値となります。
 
 
プロジェクト「p035」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p035」というフォルダを作成し、Windowsのエクスプローラ等で「p032」内のファイルを「p035」の中へコピーします。また、「p034」内のファイル「MyFunc.pas」及び「JwwGaibu.pas」を「p035」の中へコピーします(※移動しないよう注意)
Delphi6を起動します。メニュー「ファイル」→「プロジェクトを開く」を実行し、「C:\DelphiProgram\jww\p035」内の「p032.dpr」を開きます。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
p035−線の作図
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\jww\p035

メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p035」の中に「p035.dpr」として保存
「C:\DelphiProgram\jww\p035」の中に「p032.〜」のファイルが残っていますので、Windowsのエクスプローラ等で削除します。
プロジェクトマネージャを表示しコード画面の左側にドッキングしておきます。

Unit1.pas
(・・・前略・・・)
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
  i : integer ;
  s1,s2,s3,s4 : string ;
  w1,w2,w3,w4 : double ;
begin
(・・・)
  else if (ParamStr(1) = '/R2') then begin
   S_Line(px,py, JG_IPoints[1].x , JG_IPoints[1].y);
   px := JG_IPoints[1].x ;
   py := JG_IPoints[1].y ;
  end
  else if (ParamStr(1) = '/R3') then begin
   s1 := '0.0'; if (ParamCount >= 2) then s1:=ParamStr(2);
   s2 := '0.0'; if (ParamCount >= 3) then s2:=ParamStr(3);
   s3 := '0.0'; if (ParamCount >= 4) then s3:=ParamStr(4);
   s4 := '0.0'; if (ParamCount >= 5) then s4:=ParamStr(5);
   w1 := 0.0;
   w2 := 0.0;
   if (Copy(s1,1,1)='@') then begin
    w1 := px ;
    w2 := py ;
    s1 := Copy(s1,2,Length(s1));
   end;
   w1 := w1 + SDbl(s1);
   w2 := w2 + SDbl(s2);
   w3 := 0.0;
   w4 := 0.0;
   if (Copy(s3,1,1)='@') then begin
    w3 := w1 ;
    w4 := w2 ;
    s3 := Copy(s3,2,Length(s3));
   end;
   w3 := w3 + SDbl(s3);
   w4 := w4 + SDbl(s4);
   S_Line(w1,w2, w3,w4);
   px := w3 ;
   py := w4 ;
  end;
  SaveDatFile ;
  Close ;
end
(・・・後略・・・)
引数の数は ParamCount、引数値は ParamStr()で取得出来ますが、入力ミス・未入力の場合に不定値になるとまずいのでベタですが if文で判定させています。第1パラメータ→ s1 で先頭に「@」を付けている場合は前回値のpx,pyからのオフセット値として対応出来るようにしています。また、第3パラメータ→s3 で先頭に「@」を付けている場合は始点 w1,w2 からのオフセット値として対応出来るようにしています。
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p035」内に作成された「p035.exe」をフォルダ「Gapp」内へコピーします。外部変形を実行して動作確認をしてみて下さい。
しかしこれだけでは不足があります。それは、軸角です。
 
軸角は原点を中心に用紙全体を回転させるような機能ですが、座標値入力を行った場合は、軸角にも対応させるべきでしょう。軸角を指定していても無効なのであれば軸角を指定している意味がありません。軸角は変数 JG_Jikukaku に入っていますので、座標を 原点(0,0)を中心に回転を掛ける必要があります。この場合、前回値 px,pyは既に軸角で回転が掛けられた値ですので注意をする必要があります。
Unit1.pas
(・・・前略・・・)
// 起動時
procedure TForm1.FormShow(Sender: TObject);
var
  i : integer ;
  s1,s2,s3,s4 : string ;
  w1,w2,w3,w4,w5,w6 : double ;
begin
(・・・)
   else if (ParamStr(1) = '/R3') then begin
    s1 := '0.0'; if (ParamCount >= 2) then s1:=ParamStr(2);
    s2 := '0.0'; if (ParamCount >= 3) then s2:=ParamStr(3);
    s3 := '0.0'; if (ParamCount >= 4) then s3:=ParamStr(4);
    s4 := '0.0'; if (ParamCount >= 5) then s4:=ParamStr(5);
    w1 := 0.0;
    w2 := 0.0;
    if (Copy(s1,1,1)='@') then begin
     w1 := px ;
     w2 := py ;
     s1 := Copy(s1,2,Length(s1));
    end;
    Rev(w5,w6, SDbl(s1),SDbl(s2),0.0,0.0,JG_Jikukaku);
    w1 := w1 + w5;
    w2 := w2 + w6;
    w3 := 0.0;
    w4 := 0.0;
    if (Copy(s3,1,1)='@') then begin
     w3 := w1 ;
     w4 := w2 ;
     s3 := Copy(s3,2,Length(s3));
    end;
    Rev(w5,w6, SDbl(s3),SDbl(s4),0.0,0.0,JG_Jikukaku);
    w3 := w3 + w5;
    w4 := w4 + w6;
    S_Line(w1,w2, w3,w4);
    px := w3 ;
    py := w4 ;
   end;
   SaveDatFile ;
   Close ;
(・・・後略・・・)
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p035」内に作成された「p035.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.