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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】書き出しデータの取り込み(2)
前回から外部変形での書き出しデータ「JWC_TEMP.TXT」の取り込みについて記述していますが、今回は、指示点の取り込みについて考えていきます。指示点については下記。
「hp1」
 ・・・
「hp99」
指示点の書き込み(1〜99) 0は原点なので無し
 書式:hp1 x1 y1
    〜 hp99 x99 y99
 「REM #0****」
 「REM #1****」
  〜
 「REM #99****」指定時
  最終指示「REM #99#」
「hp1-」
 ・・・
「hp99-」
指示点の書き込み(1〜99) 仮線付き
 書式:hp1- x1 y1
    〜 hp99- x99 y99
 「REM #1-****」〜 指定時
 「REM #1/****」〜 指定時
  最終指示「REM #99#」
「hp1ln」
 ・・・
「hp99ln」
指示点の指定 & 線データの選択
 書式:hp1ln x1 y1
    〜 hp99ln x99 y99
    hhp1ln
    x1 y1 x2 y2
    〜
 「REM #1ln***」〜 指定時
「hp1ci」
 ・・・
「hp99ci」
指示点の指定 & 円データの選択
 書式:hp1ci x1 y1
    〜 hp99ci x99 y99
    hhp1ci
    ci 〜
    〜
 「REM #1ci***」〜 指定時
「hp1ch」
 ・・・
「hp99ch」
指示点の指定 & 文字データの選択
 書式:hp1ch x1 y1
    〜 hp99ch x99 y99
    hhp1ch
    ch 〜
    〜
 「REM #1ch***」〜 指定時
 
これより、指示点は「hp」の文字で始まる事が分かります。今現在は分かりませんが後で使うかもしれませんので最後の「-」「ln」「ci」「ch」の状態も保持する事にして、後は数字を抜き出して何番目のデータとして保持するかを考えれば良い事になります。
 
「Gapp」フォルダ(C:\JWW\Gapp)内に以下のバッチファイルを事前に用意しておきます。
p026_取り込みテスト(2).bat
REM p026−取り込みテスト(2)
@echo off
REM #jww
REM #cd
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #1 第1点を指示して下さい。(L)free (R)Read
REM #2- 第2点を指示して下さい。(L)free (R)Read
REM #3 第3点を指示して下さい。(L)free (R)Read
REM #hr
start /w p026.exe
 
プロジェクト「p026」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p026」というフォルダを作成し、Windowsのエクスプローラ等で「p025」内のファイルを「p026」の中へコピーします(※移動しないよう注意)
Delphi6を起動します。メニュー「ファイル」→「プロジェクトを開く」を実行し、「C:\DelphiProgram\jww\p026」内の「p025.dpr」を開きます。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
p026−取り込みテスト(2)
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\jww\p026

メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p026」の中に「p026.dpr」として保存
「C:\DelphiProgram\jww\p026」の中に「p025.〜」のファイルが残っていますので、Windowsのエクスプローラ等で削除します。

オブジェクトインスペクタで Form1 のプロパティを変更します。
Caption取り込みテスト(2)タイトルバーに表示されます

メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。作成される「p026.exe」を「Gapp」フォルダへコピーして下さい。

Jw_cadを起動し、Jw_cad 標準添付の「Aマンション平面例.jww」を開いて
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p026_取り込みテスト(2).bat」を実行します。配置点を指示したあと、p025.exe とほぼ同じ p026.exe が動きますがその際の「JWC_TEMP.TXT」を見てみると下記のようになっています。
hq
file=C:\jww\Aマンション平面例.jww
hk 0
hs 100 100 100 100 100 100 100 100 100 100 100 1 0.5 0.333333 0.25 0.2
hzs 420 297
hcw 2 2.5 3 4 5 6 7 8 9 10
hch 2 2.5 3 4 5 6 7 8 9 10
hcd 0 0 0.5 0.5 0.5 0.5 1 1 1 1
hcc 1 1 2 2 3 3 4 4 5 5
hn 0 0 0 0
hp1 -9362.22910216718 7281.73374613003
hp2- -3835.9133126935 6436.53250773994
hp3 780.185758513932 7281.73374613003
lg0
ly9
lc2
lt1
lw0
cn4
cn"$<MS ゴシック>
#
#
lg0 11
lgn一般図
ly0 11
lyn 芯
ly1 11
lyn 躯体
ly2 11
lyn間仕切り
ly3 11
lyn 建具
ly4 11
lyn設備機器
ly5 11
lyn 仕上
ly6 11
lyn 室名
ly7 11
lyn 寸法
ly8 11
lyn エレベ-タ
ly9 11
lyn 図名
lya 11
lyn
lyb 11
lyn
lyc 11
lyn
lyd 11
lyn
lye 11
lyn
lyf 11
lyn
この内容を取り込んで、変数に代入していく事を考えます。配置点の最大数は99、何番目の座標か、を知りたいので配列変数を使いますが、静的配列だとメモリの絡みがありますので動的配列にする事にします。動的配列の添え字は 0 からなので、普通は 0〜98 になりますがややこしくなるといけないので、1〜99を使う事として、0 は未使用状態とし、100データ分メモリ確保するとします。代入するデータとしては、
・X座標
・Y座標
・指示状態 無し=0、「-」=1、「ln」=2、「ci」=3、「ch」=4
ですが、バッチファイルをわざと
・・・
REM #1 第1点を指示して下さい。(L)free (R)Read
REM #4- 第4点を指示して下さい。(L)free (R)Read
REM #7- 第7点を指示して下さい。(L)free (R)Read
・・・
のようにすると
・・・
hp1 -8907.12074303405 7996.9040247678
hp4- -4095.97523219814 6826.6253869969
hp7- 2990.71207430341 8647.05882352941
・・・
のようになりますので、1,2,3,4,・・・と常に連続する訳ではない事を考慮する必要があります。ですので、指示されたかどうかを示すフラグを用意する事と、実際の指示点数を別に変数に入れる事にします。
 
プロジェクトマネージャで「JwwGaibu.pas」をダブルクリックし、コード画面に表示します。変数宣言と初期設定部分を追加します。動的配列を使った最後にはメモリ解放を行う必要がありますので、エンディング処理 EndJwwGaibu を追加します。外部変形プログラムの最後には必ずこの手続きを実行するようにします。
unit JwwGaibu;
(・・・中略・・・)
type
(・・・中略・・・)
  TJwwIndPoint = record
   flg : Boolean ; // True:指示 False:未指示
   x : double ;
   y : double ;
   sta : integer ; // 0:無し 1:- 2:ln 3:ci 4:ch
  end;
 
var
(・・・中略・・・)
  JG_IPoints : array of TJwwIndPoint ; // 指示点
  JG_IPointN : integer ; // 指示点数
 
  procedure InitJwwGaibu ;
  procedure EndJwwGaibu ;
(・・・中略・・・)
// 変数初期化
procedure InitJwwGaibu ;
(・・・中略・・・)
  SetLength(JG_IPoints, 100);
  for i:=0 to 99 do begin
   with JG_IPoints[i] do begin
    flg := False;
    x := 0.0;
    y := 0.0;
    sta := 0;
   end;
  end;
  JG_IPointN := 0 ;
end;
 
// 変数最終処理
procedure EndJwwGaibu ;
begin
  JG_IPoints := nil;
end;
 
(・・・中略・・・)
GetTempCode内に追記します。
var
(・・・中略・・・)
  s : string ;
begin
(・・・中略・・・)
  end
  //
  // 指示点の読み込み
  else if (AnsiPos('hp',pa[0]) = 1)and(n >= 3) then begin
   j := 0 ;
   s := Copy(pa[0],3,Length(pa[0]));
   i := AnsiPos('-',pa[0]);
   if (i > 0) then begin
    s := Copy(pa[0],3,i-3);
    j := 1;
   end;
   i := AnsiPos('ln',pa[0]);
   if (i > 0) then begin
    s := Copy(pa[0],3,i-3);
    j := 2;
   end;
   i := AnsiPos('ci',pa[0]);
   if (i > 0) then begin
    s := Copy(pa[0],3,i-3);
    j := 3;
   end;
   i := AnsiPos('ch',pa[0]);
   if (i > 0) then begin
    s := Copy(pa[0],3,i-3);
    j := 4;
   end;
   i := SInt(s) ;
   if (i >= 1)and(i <= 99) then begin
    with JG_IPoints[i] do begin
     flg := True;
     x := SDbl(pa[1]);
     y := SDbl(pa[2]);
     sta := j;
    end;
    Inc(JG_IPointN);
   end;
 end;
(・・・後略・・・)
変数に入れた事を確認出来ないと分かりませんので、Form1の画面を少し大きくして、Form1に [Additional]内の StringGrid コンポーネントを配置し、オブジェクトインスペクタで StringGrid1 のプロパティを設定します。
DefaultColWidth100セル幅を少し大きく
RowCount100全行数を100に
Options内
 goThumbTracking
True スクロールバー操作中
内容をスクロール表示させる

Unit1.pasの内容を追記します。
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  //
  with StringGrid1 do begin
   ColWidths[0] := 24;
   ColWidths[1] := 64;
   Cells[0,0] := 'No';
   Cells[1,0] := '指示有無';
   Cells[2,0] := 'X座標';
   Cells[3,0] := 'Y座標';
   Cells[4,0] := '指示状態';
   for i:=1 to 99 do begin
    Cells[0,i] := IntToStr(i);
    if (JG_IPoints[i].flg) then s := '○' else s := '−';
    Cells[1,i] := s;
    Cells[2,i] := FloatToStr(JG_IPoints[i].x);
    Cells[3,i] := FloatToStr(JG_IPoints[i].y);
    s := '';
    Case(JG_IPoints[i].sta)of
    1: s := '-';
    2: s := 'ln';
    3: s := 'ci';
    4: s := 'ch';
    end;
    Cells[4,i] := s;
   end;
  end;
end;
 
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // JWC_TEMP.TXTを保存します
  SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
  // 最終処理
  EndJwwGaibu ;
end;

end.
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p026」内に作成された「p026.exe」をフォルダ「Gapp」内へコピーします。
Jw_cadを起動し、Jw_cad 標準添付の「Aマンション平面例.jww」を開いて
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p026_取り込みテスト(2).bat」を実行して下さい。

バッチファイルを
・・・
REM #1 第1点を指示して下さい。(L)free (R)Read
REM #4- 第4点を指示して下さい。(L)free (R)Read
REM #7- 第7点を指示して下さい。(L)free (R)Read
・・・
のようにしたり
・・・
REM #1ln 線上の第1点を指示して下さい。
REM #2ci 円上の第2点を指示して下さい。
REM #3ch 文字上の第3点を指示して下さい。
・・・
のようにしてみて、正常動作する事を確認して下さい。
 
 
今回はここまでとします。
 
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、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.