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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
【Jw_cad 外部変形】書き出しデータの取り込み(1)
今回から外部変形での書き出しデータ「JWC_TEMP.TXT」の取り込みについて少し考えていきます。まずは、これまで書いてきた事をざっとまとめてみます。
「hq」外部プログラム実行チェック文字
「file=〜」 図面ファイル名(フルパス表記)
 「REM #hf」指定時
「hk」 軸角
 書式:hk a
    a:軸角[°]
「hs」 レイヤグループ毎の縮尺
 引数:16個 分母値
「hzs」 図面サイズ(用紙寸法mm)
 書式:hzs xsize ysize
 「REM #zs」指定時
「hcw」 文字幅寸法 文字種1〜10各文字幅(図寸)
 引数:10個
「hch」 文字高寸法 文字種1〜10各文字高(図寸)
 引数:10個
「hcd」 文字間隔寸法 文字種1〜10各文字間隔(図寸)
 引数:10個
「hcc」 文字色番号 文字種1〜10各文字色
 引数:10個
「hn」 選択範囲
 引数:4個 x1 y1 x2 y2
「lg」 レイヤグループ設定 現在のレイヤグループ
 書式:lg○  ○:0〜9,a〜f
「ly」 レイヤ設定 現在のレイヤ
 書式:ly○  ○:0〜9,a〜f
「lc」 線色設定 現在の線色
 書式:lc○  ○:線色
「lt」 線種設定 現在の線種
 書式:lt○  ○:線種
「lw」 線幅設定 現在の線幅
 書式:lw○  ○:線幅 1/100mm単位整数
「cn」 文字種
 書式:cn○
    ○:文字種番号 1〜10
 書式:cn0 w h d c
    任意サイズ文字を指定
    ※バッチファイルで「REM #jww」指定時に有効
    w:文字幅
    h:文字高さ
    d:文字間隔
    c:線色番号
 書式:cn"$<フォント名>
    ※バッチファイルで「REM #jww」指定時に有効
    フォント名:MS ゴシック 等
    cn"$<〜>/ : 斜体指定
「cc」 文字基準点
 書式:cc○
    ○:基準点モード
      0:左下 1:中下 2:右下
      3:左中 4:中中 5:右中
      6:左上 7:中上 8:右上
 「REM #zc」指定時
「z1」 ハッチ属性
 書式:z1
 「REM #zz」指定時
「z2」 図形属性
 書式:z2
 「REM #zz」指定時
「z3」 寸法属性
 書式:z3
 「REM #zz」指定時
「z4」 建具属性(包絡処理対象外の指定)
 書式:z4
 「REM #zz」指定時
「z5」 建具属性(包絡処理対象 の指定)
 書式:z5
 「REM #zz」指定時
「#」コメント(注釈行)
「bz」 データが図面寸法
 書式:bz
 「REM #bz」指定時、各座標が図寸で書出し
「b0」図面寸法でデータを読み込み解除
「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***」〜 指定時

「hd」 選択データの削除
 書式:hd

「by」 読み込み倍率指定
 書式:by n
    n:倍率

線データ(始点x1,y1 終点x2,y2)
 書式:x1 y1 x2 y2

「ci」 円データ
 書式:ci x y r
    x,y:中心座標
    r:半径

「ci」 弧・楕円データ
 書式:ci x y r sa ea h ka
    x,y:中心座標
    r:半径
    sa:開始角度[°]
    ea:終了角度[°]
    h:偏平率
    ka:傾き角度[°]

「ch」 横文字
 書式:ch x1 y1 x2 y2 "文字列
    x1,y1:基準点座標
    x2,y2:文字作図方向を示す座標
    "文字列:作図する文字内容

「cv」 縦文字
 書式:cv x1 y1 x2 y2 "文字列
    x1,y1:基準点座標
    x2,y2:文字作図方向を示す座標
    "文字列:作図する文字内容

「cs」寸法値

「cr」半径 寸法値

「co」直径 寸法値

「cp」角度 寸法値

「ct」累寸 寸法値

「ck」日影 真北データ

「cz」日影 建物高さデータ

「c2」2.5D データ

「pn」 点の線色番号
 書式:pn○

「pt」 点データ
 書式:pt x y
    x,y:配置座標

「pt」 点マーカデータ
 書式:pt x y bai ang cod
    x,y:配置座標
    bai:倍率(標準 1)
    ang:角度[°]
    cod:マーカコード
 マーカーコード
   1:blancked arrow 2:blancked box
   3:blancked dot 4:dimension origin
   5:filled box 6:filled arrow
   7:filled dot 8:integral symbol
   9:Open Arrow 10:slash
   11:unfilled arrow
   -1:asterisk -2:circle -3:dot -4:plus
   -5:square -6:triangle -7:X

「msg」 寸法図形データ
 書式:msg
    x1 y1 x2 y2
    cs x1 y1 x2 y2 "寸法値
 「REM #jww」指定時

「pl」 曲線データ
 書式:pl
    x1 y1 x2 y2
    x2 y2 x3 y3
    x3 y3 x4 y4
    #

「BL」 ブロックデータ
 書式:BL x y "ブロック名
    x,y:配置座標
 「REM #jww」指定時

「lc」 線色設定
 書式:lc○
    線色○で作図します
 書式:lc10 col
    任意色 col で作図します
    col:赤(0〜255)+緑(0〜255)×256+青(0〜255)×65536

「sl」 線形ソリッド図形
 書式:sl x1 y1 x2 y2
    x1,y1:開始点座標
    x2,y2:終了点座標
三角形ソリッド図形
 書式:sl x1 y1 x2 y2 x3 y3
    x1,y1:第1点座標
    x2,y2:第2点座標
    x3,y3:第3点座標
    第1点→第2点→第3点
    →第1点と結びます
四角形ソリッド図形
 書式:sl x1 y1 x2 y2 x3 y3 x4 y4
    x1,y1:第1点座標
    x2,y2:第2点座標
    x3,y3:第3点座標
    x4,y4:第4点座標
    第1点→第2点→第3点→第4点
    →第1点と結びます

「sc」 円ソリッド図形
 書式:sc x y r h ka sa da flag
    x,y:中心点座標
    r :半径
    h :偏平率(円状態は「1」)
    ka :傾き角度[rad]
    sa :開始角度[rad]
    da :円弧角度[rad]
    flag:円「100」、弓形「5」
      扇形「0」、円外側「-1」

「se」 円周ソリッド図形
 書式:se x y r h ka sa da flag
    x,y:中心点座標
    r :半径
    h :偏平率(円状態は「1」)
    ka :傾き角度[rad]
    sa :開始角度[rad]
    da :円弧角度[rad]
    flag:円「100」、円弧「0」

「so」 円環ソリッド図形(同一扁平率タイプ)
 書式:so x y r h ka sa da ri
    x,y:中心点座標
    r :半径
    h :偏平率(円状態は「1」)
    ka :傾き角度[rad]
    sa :開始角度[rad]
    da :円弧角度[rad]
    ri :内円半径

「sg」 円環ソリッド図形(同一幅タイプ)
 書式:sg x y r h ka sa da ri
    x,y:中心点座標
    r :半径
    h :偏平率(円状態は「1」)
    ka :傾き角度[rad]
    sa :開始角度[rad]
    da :円弧角度[rad]
    ri :内円半径

「REM #gn」 レイヤ状態書込み
 レイヤグループ名・レイヤ名・レイヤグループ状態・レイヤ状態を指定

「REM #g0」
又は 無指定
レイヤグループの選択
書込みレイヤグループのみ選択する

「REM #g1」 レイヤグループの選択
全てのレイヤグループを選択する
「REM #h1」「REM #h2」「REM #h3」で有効

「lg」 レイヤグループ状態
 書式:lg○ stat
    ○:レイヤグループ番号:0〜9,a〜f
    stat:状態

「lgn」 レイヤグループ名
 書式:lgn****
    ****:レイヤグループ名

「ly」 レイヤ状態
 書式:ly○ stat
    ○:レイヤ番号:0〜9,a〜f
    stat:状態

「lyn」 レイヤ名
 書式:lyn****
    ****:レイヤ名

状態
の詳細
1の位
 0:非表示状態
 1:表示状態
10の位
 0:編集不可(読取り不可)状態
 1:編集可能(読取り可能)状態
 2:編集不可でプロテクトレイヤ(表示・編集状態の変更可能)
 3:編集可能でプロテクトレイヤ(表示・編集状態の変更可能)
 6:編集不可でプロテクトレイヤ(表示・編集状態の変更不可)
 7:編集可能でプロテクトレイヤ(表示・編集状態の変更不可)
※外部変形で状態を変更する事は出来ない。見るだけである。
 
・・・以上のような感じでしょうか。
(※「JWC_TEMP.TXT」への書き出しは行われませんが、座標ファイル入力する際の、連続線データ、相対座標、極座標については除外します)
 
データ選択、範囲選択を行った場合は、選択した要素データ情報が書き出されます。行っていない場合は書き出されません。ここでは、要素データ情報がないものとして考えます。
例として下記のようなバッチファイルを考えます。前回の p024.exe を起動していますがそのままにしています。
p025_取り込みテスト(1).bat
REM p025−取り込みテスト(1)
@echo off
REM #jww
REM #cd
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #0配置点を指示して下さい。(L)free (R)Read
REM #hr
start /w p024.exe
Jw_cadを起動し、Jw_cad 標準添付の「Aマンション平面例.jww」を開いて
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p025_取り込みテスト(1).bat」を実行します。配置点を指示したあと前回の p024.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 5656.34674922601 -7021.67182662539 5656.34674922601 -7021.67182662539
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
この内容を取り込んで、変数に代入していく事を考えます。
 
 
プロジェクト「p025」の準備を行います。「C:\DelphiProgram\jww」フォルダの中に「p025」というフォルダを作成し、Delphi6を起動します。メニュー「プロジェクト」→「オプション」を実行し、下記の設定を行います。
[アプリケーション]頁
 タイトル
p025−取り込みテスト(1)
[ディレクトリ/条件]頁
 パス及びディレクトリ
C:\DelphiProgram\jww\p025

メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p025」の中に「Unit1.pas」を保存
メニュー「ファイル」→「プロジェクトに名前を付けて保存」
「C:\DelphiProgram\jww\p025」の中に「p025.dpr」として保存

Form1の画面の大きさを扱いやすいよう小さくし、オブジェクトインスペクタで Form1 のプロパティを設定します。
BorderIcons
 biMaximize
False最大化しないように
BorderStylebsSingle画面をリサイズしないように
Caption取り込みテスト(1)タイトルバーに表示されます
ColorclSkyBlueお好みでどうぞ
Font内
 Name
MS ゴシック プロポーショナルフォントは
文字配置調整が微妙なので
Font内
 Size
10小さいと少し見難い為
ScaledFalse 動作環境によっての文字の
大きさ変動を少し抑えられる

メニュー「表示」→「プロジェクトマネージャ」
を実行し、コード画面の左側にドッキングさせておきます。
前回作成した「MyFunc.pas」を取り込んでみます。
メニュー「ファイル」→「開く」
「C:\DelphiProgram\jww\p024」の中の「MyFunc.pas」を指定すると、コード画面に MyFunc 内容が表示されます。この状態で
メニュー「ファイル」→「名前を付けて保存」
「C:\DelphiProgram\jww\p025」の中に「MyFunc.pas」のまま保存
(※フォルダを移動していますので注意)
メニュー「プロジェクト」→「プロジェクトに追加」
を行い「C:\DelphiProgram\jww\p025」の中の「MyFunc.pas」を指定します。すると、コード画面左側のプロジェクトマネージャに「MyFunc.pas」が追加されます。
 
同様に、前回作成した「JwwGaibu.pas」についても同様に行います。
(※共通フォルダを作ってその中で作業を行い複数バージョンが出来ないようにするというのも1つの手法ですが、ここでは敢えて、コピーしてきて追加、を行うようにしています)
 
Unit1.pas の uses節に MyFunc と JwwGaibu を追加します。
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  MyFunc, JwwGaibu ;
 
type
  TForm1 = class(TForm)
・・・
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
 
 
オブジェクトインスペクタにて
Form1 の イベント OnShowの箇所でダブルクリック、OnCloseの箇所でダブルクリックし、取りあえず下記のように追記します。(※以下では全角空白を付けて桁調整等をしていますが実際は半角空白或いは無しです)
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  MyFunc, JwwGaibu ;
 
type
  TForm1 = class(TForm)
   procedure FormShow(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
   { Private 宣言 }
   AppPath : string ;
  public
   { Public 宣言 }
  end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// 起動時
procedure TForm1.FormShow(Sender: TObject);
begin
  // 初期設定
  InitJwwGaibu ;
  // プログラムのあるフォルダを取得します
  AppPath := ExtractFilePath(Application.ExeName) ;
  // JWC_TEMP.TXTを開きます
  OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
end;
 
// 終了時
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // JWC_TEMP.TXTを保存します
  SaveTempFile(AppPath+'JWC_TEMP.TXT') ;
end;
 
end.
変数の初期化、JWC_TEMP.TXT を開いて変数に値を代入、変数内容も考慮して最後の JWC_TEMP.TXT を保存する、という処理は、別に作ったユニットファイル 「JwwGaibu.pas」にまとめて記述します。
 
コード画面を「JwwGaibu」に切り替えて記述します。OpenTempFile内で行っていた変数初期化部分は外から別に実行するので消します。SaveTempFile内はまだ何も決めていません。
unit JwwGaibu;
 
interface
 
uses
  SysUtils, MyFunc ;
 
var
  JG_Jikukaku : double ;  // 軸角[°]
 
  procedure InitJwwGaibu ;
  function OpenTempFile(fn:string) : Boolean ;
  function SaveTempFile(fn:string) : Boolean ;
 
implementation
 
// 変数初期化
procedure InitJwwGaibu ;
begin
  JG_Jikukaku := 0.0 ;
end;
(・・・中略・・・)
function OpenTempFile(fn:string) : Boolean ;
var
  F : TextFile ;
  s : string ;
begin
  // 読み込み
  Result := False ;
  if not(FileExists(fn)) then exit;
(・・・中略・・・)
end;
 
// Jw_cad 外部変形
// 書き出しデータ「JWC_TEMP.TXT」を保存する
//  fn : ファイル名(フルパス)
// (ret)
//  True : OK  False : Error
function SaveTempFile(fn:string) : Boolean ;
var
  F : TextFile ;
  s : string ;
begin
  Result := False ;
  try
   AssignFile(F, fn);
   ReWrite(F);
 
   s := 'hq' ;
   WriteLn(F, s);
 
   CloseFile(F);
   Result := True ;
  except
   CloseFile(F);
   if FileExists(fn) then
     DeleteFile(fn);
  end;
end;
 
end.
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
 
先のバッチファイルの内容を変更します。
p025_取り込みテスト(1).bat
REM p025−取り込みテスト(1)
@echo off
REM #jww
REM #cd
REM #hf
REM #zs
REM #zc
REM #zz
REM #zw
REM #gn
REM #0配置点を指示して下さい。(L)free (R)Read
REM #hr
start /w p025.exe
 
それでは1つずつ考えて行きます。
 
◆図面ファイル名
「file=○○○」と書き出されます。新規状態では「file=」で終了です。「REM #hf」が記述されていない場合は何も書き出されません。この変数名を「JG_ZumenFile」とします。「JwwGaibu」ユニット冒頭部で変数宣言します。初期設定部分を追加します。
unit JwwGaibu;
(・・・中略・・・)
var
  JG_Jikukaku : double ;  // 軸角[°]
  JG_ZumenFile : string ;  // 図面ファイル名
(・・・中略・・・)
// 変数初期化
procedure InitJwwGaibu ;
begin
  JG_Jikukaku := 0.0 ;
  JG_ZumenFile := '' ;
end;
(・・・中略・・・)
GetTempCode内に追記します。
(・・・前略・・・)
  // 各設定内容の読み込み
  if (AnsiPos('file=',pa[0]) > 0) then begin
   // 図面ファイル名
   JG_ZumenFile := Copy(pa[0],6,Length(pa[0]));
  end
  else if (pa[0] = 'hk')and(n >= 2) then begin
(・・・後略・・・)
変数に入れた事を確認出来ないと分かりませんので、Form1に [Standard]内の Memoコンポーネントを配置します。ScrollBarsプロパティを「ssBoth」にしておきます。Unit1ユニットで以下を追記します。
(・・・前略・・・)
// 起動時
procedure TForm1.FormShow(Sender: TObject);
begin
(・・・中略・・・)
  OpenTempFile(AppPath+'JWC_TEMP.TXT') ;
  // 変数確認
  Memo1.Lines.Clear ;
  Memo1.Lines.Add('図面ファイル名:' + JG_ZumenFile);
end;
(・・・後略・・・)
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して下さい。
Windowsのエクスプローラ等で、「C:\DelphiProgram\jww\p025」内にある「p025.exe」をフォルダ「Gapp」内へコピーします。
Jw_cadを起動し、Jw_cad 標準添付の「Aマンション平面例.jww」を開いて
メニュー→その他→外部変形
「ファイル選択」画面でフォルダ「Gapp」を指定し、上記で作成したバッチファイル「p025_取り込みテスト(1).bat」を実行します。さて、図面ファイル名は画面上に表示されたでしょうか? この画面を閉じると「hq」内容で保存していますので「未実行」と表示されます。
 
ここで1つ注意しないといけないのは、図面ファイル名の中に半角空白文字があるとそれを区分文字と解釈されて、半角空白文字以降が表示されないという事です。「=」の文字は他で使用されていない様子なので、「"」同様、「=」が来た後は半角文字を区分文字として扱わないように修正します。「"」と同時指定は無い様子なので同種として処理します。JwwGaibuユニット内の GetTempCode 内に追記
(・・・前略・・・)
else if (codes[i] = '"')and(mflag) then begin
  mflag := False ;  // 「"」以降は文字:空白は区切りにならない
end
else if (codes[i] = '=')and(mflag) then begin
  pa[j] := pa[j] + codes[i] ;  // 「=」文字も含める
  mflag := False ;  // 「=」以降は文字:空白は区切りにならない
end
(・・・後略・・・)
メニュー「ファイル」→「すべて保存」を行い
メニュー「プロジェクト」→「再構築」を行いエラー表示されない事を確認して上記同様、外部変形実行し確認して下さい。
 
◆軸角
「hk ○」と書き出されます。これは既に実装済みですので Unit1での内容確認のみ
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('軸角:' + FloatToStr(JG_Jikukaku) + '°');
end;
(・・・後略・・・)
 
◆レイヤグループ毎の縮尺
「hs ○ ○ ・・・」と書き出されます。変数は配列変数とし変数名は JG_LGrpScale とします。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_LGrpScale : array[0..15] of double ;  // レイヤグループ毎縮尺分母
(・・・中略・・・)
procedure InitJwwGaibu ;
var
 i : integer ;
begin
  JG_Jikukaku := 0.0 ;
  JG_ZumenFile := '' ;
  for i:=0 to 15 do
   JG_LGrpScale[i] := 1.0 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  else if (pa[0] = 'hk')and(n >= 2) then begin
   // 軸角
   JG_Jikukaku := Sdbl(pa[1]) ;
  end
  else if (pa[0] = 'hs')and(n >= 17) then begin
   // レイヤグループ毎縮尺分母
   for i:=0 to 15 do
    JG_LGrpScale[i] := SDbl(pa[i+1]);
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
var
  i : integer ;
  s : string ;
begin
(・・・中略・・・)
  for i:=0 to 15 do begin
   s := 'レイヤグループ['+IntToHex(i,1)+']:1/' + FloatToStr(JG_LGrpScale[i]) ;
   Memo1.Lines.Add(s);
  end;
end;
(・・・後略・・・)
 
◆図面サイズ(用紙寸法mm)
「hzs ○ ○」と書き出されます。変数名は JG_ZumenXsize、JG_ZumenYsize とします。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_ZumenXsize, JG_ZumenYsize : double ; // 図面サイズ
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_ZumenXsize := 1189.0 ;
  JG_ZumenYsize := 841.0 ; // A0
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (pa[0] = 'hzs')and(n >= 3) then begin
   // 図面サイズ
   JG_ZumenXsize := SDbl(pa[1]) ;
   JG_ZumenYsize := SDbl(pa[2]) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('図面Xサイズ:' + FloatToStr(JG_ZumenXsize) + '[mm]');
  Memo1.Lines.Add('図面Yサイズ:' + FloatToStr(JG_ZumenYsize) + '[mm]');
end;
(・・・後略・・・)
 
◆文字種設定
文字種設定の変数は、文字幅「hcw」、文字高「hch」、文字間隔「hcd」、文字色「hcc」で文字種1〜10までありますから、構造体を定義して配列変数にします。
JwwGaibu.pas
(・・・前略・・・)
type
  TJwwMojisyu = record
   w : double ;
   h : double ;
   d : double ;
   col : integer ;
  end;

var
(・・・中略・・・)
  JG_Mojisyu : array[1..10] of TJwwMojisyu; // 文字種設定
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  for i:=1 to 10 do begin
   with JG_Mojisyu[i] do begin
    w := 3.0 ;
    h := 3.0 ;
    d := 0.0 ;
    col := 2 ;
   end;
  end;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (pa[0] = 'hcw')and(n >= 11) then begin
   // 文字種/文字幅
   for i:=1 to 10 do
    JG_Mojisyu[i].w := SDbl(pa[i]) ;
  end
  else if (pa[0] = 'hch')and(n >= 11) then begin
   // 文字種/文字高
   for i:=1 to 10 do
    JG_Mojisyu[i].h := SDbl(pa[i]) ;
  end
  else if (pa[0] = 'hcd')and(n >= 11) then begin
   // 文字種/文字間隔
   for i:=1 to 10 do
    JG_Mojisyu[i].d := SDbl(pa[i]) ;
  end
  else if (pa[0] = 'hcc')and(n >= 11) then begin
   // 文字種/文字色
   for i:=1 to 10 do
    JG_Mojisyu[i].col := SInt(pa[i]) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  for i:=1 to 10 do begin
   Memo1.Lines.Add('文字種'+IntToStr(i));
   s := ' W:' + FloatToStr(JG_Mojisyu[i].w) + 'mm ';
   s := s + 'H:' + FloatToStr(JG_Mojisyu[i].h) + 'mm ';
   s := s + 'D:' + FloatToStr(JG_Mojisyu[i].d) + 'mm ';
   s := s + '色No.' + IntToStr(JG_Mojisyu[i].col) ;
   Memo1.Lines.Add(s);
  end;
end;
(・・・後略・・・)
 
◆実寸/図寸
選択範囲の前に、実寸か図寸か区別するための変数 JG_Zusun をブーリアン値で示す事にします。Falseであれば実寸、Trueであれば図寸とします。初期値はFalseで、「bz」が現れたら True値にします。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_Zusun : Boolean ; // 実寸(False)、図寸(True)
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_Zusun := False ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (pa[0] = 'bz') then begin
   // 図寸
   JG_Zusun := True ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  if (JG_Zusun) then
   Memo1.Lines.Add('書き出しデータ:【図寸】')
  else
   Memo1.Lines.Add('書き出しデータ:【実寸】');
end;
(・・・後略・・・)
 
◆選択範囲
「hn ○ ○ ○ ○」と書き出されます。変数名は JG_AreaX1、JG_AreaY1、JG_AreaX2、JG_AreaY2 とします。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_AreaX1, JG_AreaY1 : double ; // 選択範囲 左下点
  JG_AreaX2, JG_AreaY2 : double ; // 選択範囲 右上点
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_AreaX1 := 0.0 ;
  JG_AreaY1 := 0.0 ;
  JG_AreaX2 := 0.0 ;
  JG_AreaY2 := 0.0 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (pa[0] = 'hn')and(n >= 5) then begin
   // 選択範囲
   JG_AreaX1 := SDbl(pa[1]) ;
   JG_AreaY1 := SDbl(pa[2]) ;
   JG_AreaX2 := SDbl(pa[3]) ;
   JG_AreaY2 := SDbl(pa[4]) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('選択範囲:');
  Memo1.Lines.Add(' 左下点:'+FloatToStr(JG_AreaX1)+','+FloatToStr(JG_AreaY1) + '[mm]');
  Memo1.Lines.Add(' 右上点:'+FloatToStr(JG_AreaX2)+','+FloatToStr(JG_AreaY2) + '[mm]');
end;
(・・・後略・・・)
 
◆書込みレイヤグループ(現在のレイヤグループ)
「lg○」と書き出されます。最初に書き出されるものだけを対象とします。以降にも現れる可能性がありますので注意します。変数名は JG_CurLGrp とします。0〜15の値とします。-1は未出力。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurLGrp : integer ; // 現在のレイヤグループ
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurLGrp := -1 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('lg',pa[0]) > 0)and(JG_CurLGrp = -1) then begin
   // 現在のレイヤグループ
   JG_CurLGrp := SInt('$'+Copy(pa[0],3,1)) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  s := IntToStr(JG_CurLGrp) + '(' + IntToHex(JG_CurLGrp,1) + ')' ;
  Memo1.Lines.Add('書込みレイヤグループ:'+s);
end;
(・・・後略・・・)
 
◆書込みレイヤ(現在のレイヤ)
「ly○」と書き出されます。最初に書き出されるものだけを対象とします。以降にも現れる可能性がありますので注意します。変数名は JG_CurLay とします。0〜15の値とします。-1は未出力。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurLay : integer ; // 現在のレイヤ
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurLay := -1 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('ly',pa[0]) > 0)and(JG_CurLay = -1) then begin
   // 現在のレイヤ
   JG_CurLay := SInt('$'+Copy(pa[0],3,1)) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  s := IntToStr(JG_CurLay) + '(' + IntToHex(JG_CurLay,1) + ')' ;
  Memo1.Lines.Add('書込みレイヤ:'+s);
end;
(・・・後略・・・)
 
◆書込み線色(現在の線色)
「lc○」と書き出されます。最初に書き出されるものだけを対象とします。以降にも現れる可能性がありますので注意します。変数名は JG_CurCol とします。1〜の値とします。-1は未出力。SXF線色は101〜356となるようです。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurCol : integer ; // 現在の線色
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurCol := -1 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('lc',pa[0]) > 0)and(JG_CurCol = -1) then begin
   // 現在の線色
   JG_CurCol := SInt(Copy(pa[0],3,Length(pa[0]))) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('書込み線色:'+IntToStr(JG_CurCol));
end;
(・・・後略・・・)
 
◆書込み線種(現在の線種)
「lt○」と書き出されます。最初に書き出されるものだけを対象とします。以降にも現れる可能性がありますので注意します。変数名は JG_CurLtp とします。1〜の値とします。-1は未出力。SXF線種は31〜62となるようです。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurLtp : integer ; // 現在の線種
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurLtp := -1 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('lt',pa[0]) > 0)and(JG_CurLtp = -1) then begin
   // 現在の線種
   JG_CurLtp := SInt(Copy(pa[0],3,Length(pa[0]))) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('書込み線種:'+IntToStr(JG_CurLtp));
end;
(・・・後略・・・)
 
◆書込み線幅(現在の線幅)
「lw○」と書き出されます。最初に書き出されるものだけを対象とします。以降にも現れる可能性がありますので注意します。変数名は JG_CurWid とします。0〜の値(1/100mm単位)とします。-1は未出力。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurWid : integer ; // 現在の線幅[1/100mm単位]
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurWid := -1 ;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('lw',pa[0]) > 0)and(JG_CurWid = -1) then begin
   // 現在の線幅
   JG_CurWid := SInt(Copy(pa[0],3,Length(pa[0]))) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('書込み線幅:'+IntToStr(JG_CurWid));
end;
(・・・後略・・・)
 
◆書込み文字種(現在の文字種)
「cn○」と書き出されます。任意サイズの場合は文字幅等も書き出されます。最初に書き出されるものだけを対象とします。以降にも現れる可能性がありますので注意します。変数名は JG_CurMjs とします。0〜10の値とします。-1は未出力。任意サイズ用に JG_CurMjsW、JG_CurMjsH、JG_CurMjsD、JG_CurMjsC、も用意します。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurMjs : integer ; // 現在の文字種
  JG_CurMjsW,JG_CurMjsH,JG_CurMjsD : double ; // 任意サイズの場合
  JG_CurMjsC : integer ; // ・・
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurMjs := -1 ;
  JG_CurMjsW := 0.0;
  JG_CurMjsH := 0.0;
  JG_CurMjsD := 0.0;
  JG_CurMjsC := 0;
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('cn',pa[0]) > 0)and(JG_CurMjs = -1) then begin
   // 現在の文字種
   JG_CurMjs := SInt(Copy(pa[0],3,Length(pa[0]))) ;
   if (JG_CurMjs = 0)and(n >= 5) then begin
    JG_CurMjsW := SDbl(pa[1]) ;
    JG_CurMjsH := SDbl(pa[2]) ;
    JG_CurMjsD := SDbl(pa[3]) ;
    JG_CurMjsC := SInt(pa[4]) ;
   end;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  s := IntToStr(JG_CurMjs) ;
  if (JG_CurMjs = 0) then begin
   s := s + ' W:' + FloatToStr(JG_CurMjsW);
   s := s + ' H:' + FloatToStr(JG_CurMjsH);
   s := s + ' D:' + FloatToStr(JG_CurMjsD);
   s := s + ' 色No.' + IntToStr(JG_CurMjsC);
  end;
  Memo1.Lines.Add('書込み文字種:'+s);
end;
(・・・後略・・・)
 
◆書込み文字フォント(現在の文字フォント)
「cn"$<フォント名>」と書き出されます。変数名は JG_CurFont とします。前後の「<」「>」はそのまま残して入っていますので注意。「"」の文字は解釈部の中で除去していますので「cn"$」ではなく「cn$」で判定しています。
JwwGaibu.pas
(・・・前略・・・)
var
(・・・中略・・・)
  JG_CurFont : string ; // 現在の文字フォント
(・・・中略・・・)
procedure InitJwwGaibu ;
(・・・中略・・・)
  JG_CurFont := '';
end;
(・・・中略・・・)
procedure GetTempCode(codes:string);
(・・・中略・・・)
  end
  else if (AnsiPos('cn$',pa[0]) > 0)and(JG_CurFont = '') then begin
   // 現在の文字フォント
   JG_CurFont := Copy(pa[0],4,Length(pa[0])) ;
  end;
(・・・後略・・・)
Unit1.pas
(・・・前略・・・)
procedure TForm1.FormShow(Sender: TObject);
(・・・中略・・・)
  Memo1.Lines.Add('書込み文字フォント:'+JG_CurFont);
end;
(・・・後略・・・)
 
-1値=未出力としていますが、それが都合が悪いという場合には、OpenTempFile内でファイルを読み込んだ後、-1値の場合には「0」や「1」などに変更するというようなif文を追加されると良いでしょう。
 
今回はここまでとします。
 
今回のバッチファイルと実行ファイル、及び、ソースファイルについては、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.