超初心者金公の超初心者のための外部変形作成講座
(もちろん for WindowsのJw_cadですよ)

Jw_cadサイトをあちこち見てみると外部変形に関する話題がとても多いですね。
そこで外部変形とはどんなものかと興味がわいてきましたので、解説サイトを回って見ましたが、cadは(も)超初心者である金公にはちんぷかんで理解出来ません。
そこで、Jw_cadをインストールすると、本体と同じ場所にあるJWW_SMPL.BAT(三 斜 計 算)を繰り返し読むうちにチョットだけ理解出来てきましたので金公と同レベルの超初心者のみなさんに少しでも外部変形の理解をお手伝い出来ないかと思い、おこがましくも外部変形超初心者講座のコーナーを作ってみました。
内容は金公が解った部分だけを、金公の独断と偏見でお伝えしますので、間違っているところも多々あると思います。
「又バカなことを書いちょるな」と笑い飛ばしながらおつき合い下さい。


まず解ったこと

■ 外部変形はバッチファイルなので、バッチファイル(MS-DOS)の知識がすこし必要だ。
■ Jw_cadは自らの画面上データ(線など)を「JWC_TEMP.TXT」という名前のテキストファイルに書き出す能力を持っている。
■ それを書き出すおまじない(命令)は外部変形バッチファイルにJw_cad独自の書式、コマンドを書き込む必要がある。
■ 外部変形バッチファイルには本来のバッチコマンドとJw_cad独自のコマンドがお互いの干渉なしで混在する。
■ 外部変形バッチファイルを動作させると、データの書出の後、そのデータを読み込み作画する能力を持っている。
■ 書き出したデータをそのまま読み込んでも画面上の変化はなく同じデータが2重になるだけでなんの役にもたたない。
■ 役に立つ外部変形にする為にはJw_cadが書き出したデータを誰かが読み取り、それを元に加工しなければならない。
■ 加工後のデータをテキストファイルとして書きだし、それをJw_cadに読み込ませることで、役立つ外部変形が出来る。
■ 以上のことから、書き出されたデータを加工する為にテキスト加工出来るプログラムが必要である。
■ そのプログラムで主に使われている言語が[AWK]や[Ruby]スクリプト言語だ。

 

 

目 次

( 初めて受講される方は検証順にお進み下さい )

 

 

検証1------------バッチファイルを通してJWWが自らのデータを書き出す事を検証。
検証2------------バッチファイルを通してJWWがデータを取込、自動で作図する事を検証。
検証3------------エクセルのVBAを使って外部変形プログラムが動作する事を検証。
検証3の解説-----検証3で利用したエクセルVBAのソースを解説。
検証4------------プログラミング環境において便利なバッチファイルを紹介。

外部変形関連BBS---ご質問などはこちらへ、管理人は無能ですが達人様のお答えが期待出来るかも。

 

 

検証1
 

■ 以下の文章をメモ帳やエディターに書き込み、任意のフォルダに [ no1.bat ] という名前で保存。
■ ちなみに [ REM ] というコマンドはバッチファイルではコメント行と認識され、プログラム的には無効ですが、Jw_cadではその事を利用して独自のコマンドとして認識するようです。この 外部変形ファイル内で、バッチファイルとして有効なコマンドは [ echo off ] のみです。
 
REM 金公の超初心者外変検証1
@echo off
REM #jww
REM #cd
REM #h4
REM #e

■ Jw_cadを起動して、用紙A4、縮尺1/1に設定。
■ 長さ200mmの水平線を画面中央付近に作画する。
■ メニューバーの [ その他(A) ] → [ 外部変形(G) ] から保存済みの [ no1.bat ] をダブルクリック
■ 画面上には [ 未実行 ] と表示されますが、今は検証作業ですから無視して [ no1.bat ] のあるフォルダに [ JWC_TEMP.TXT ] と云う名前のファイルが出来ていると思いますので開いてみてください。

hq
hk 0
hs 1 30 30 30 30 30 30 30 30 30 30 30 30 30 100 1
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 1 1 1 1 1
hcc 1 1 2 2 3 3 4 4 5 5
hn -117.35393258427 -56.7303370786517 124.584269662921 62.8483146067416
lg0
ly0
lc2
lt1
cn3
cn"$<MS ゴシック>
#
-105.674157303371 0 94.3258426966292 0
 
■ 金公の結果は上のような文字列になっています。(各自の環境や線データの位置の違いで、同じとは限りません。)
■ これが貴方のJw_cadの現在のデータです。
■ 一番下行の数値に注目してください。

-105.674157303371 0 94.3258426966292 0

■ 良くみると、半角スベースをはさんだ4ブロックに分かれています。
■ 左から2ブロックが今作画した線データの開始点座標XY、右2ブロックが終点座標XYです。
■ 左から2ブロック目の数値 [ 0 ] と、最後の数値 [ 0 ] が同じ数値です。これはY座標が同じ、すなわち水平線であることが解ります。
■ 金公の場合、偶然 [ 0 ] になりましたが、貴方の場合はもっと複雑な数値かもしれません。
■ 左から1ブロック目と3ブロック目の数値、すなわち水平線の開始X座標と、終点座標Xとの差はちょうど [ 200mm ] で水平線作画時に指定した数値ときっちり一緒です。
■ これでJw_cadが自らのデータをテキストファイルとして書き出したことの検証は確認出来たと思います。
■ 次はJw_cadの読込を検証してみます。

目 次

検証2
 

■ 検証2の作業にあたり、Jw_cadを一旦終了して起動し直す。
■ 以下の文章をメモ帳に書き込み、任意のフォルダに [ no2.bat ] という名前で保存。
■ 今度は [ copy no2.txt jwc_temp.txt ] が有効なバッチファイルとして追加され、 [ REM #h4 ] が削除されました。
 
REM 金公の超初心者外変検証2
@echo off
REM #jww
REM #cd
REM #e
copy no2.txt jwc_temp.txt

■ 先ほどJw_cadから書き出された [ JWC_TEMP.TXT ] の一番下の数値4ブロックをコピーして新規作成したメモ帳などに貼付。
■ 特に先頭の「hq」が残ってるとJw_cadに知らんぷりされます。本来は、加工されていないデータを読み込まないための機能だそうです。(makumaさんよりご指導頂きました。)
■ その後、[ no2.txt ] と云う名前で保存する。 元の [ JWC_TEMP.TXT ] は削除。
■ フォルダ内には、 [ no1.bat ] 、[ no2.bat ] 、[ no2.txt ] の3つのファイルが存在している状態です。
■ 検証1と同じ方法でメニューから外部変形を呼び出して、今度は [ no2.bat ] を実行します。
■ 何も書かれていないはずのJw_cadの画面中央付近に [ 200mm ] の水平線が作図されましたね。
■ 又、削除したはずの [ JWC_TEMP.TXT ] が再度出来上がっているはずです。
■ すなわち、[ REM #h4 ] がデータの書き出し、 [ copy no2.txt jwc_temp.txt ] の一行が、読み込みをする部分だと解ります。
■ ただし、[ REM #h4 ] はJw_cadに対する命令で [ copy no2.txt jwc_temp.txt ] はバッチファイルへの命令とJw_cadへの命令を兼ねています。
如何でしたか?検証1と検証2を体験して、外部変形の動作が見えてきたでしょうか?
本当に役立つ外部変形を作成するには、検証1と検証2の間で加工する為のプログラムが必要だと云うことがご理解出来たと思います。ここから先へ進まれる方は、自分にあった言語を選び、そのプログラムの勉強へと進んでください。
ここまで理解出来たなら、外部変形作成の講座を開いておられる多くのサイトでの解説が理解しやすくなったと思います。ガンバッテね。

と云うわけでエクセルで動作する役に立たない外部変形を次の検証3で紹介します。
 

外変データ集
( 3,084,254 byt )

いつもノー天気な金公が検証1 & 検証2を応用して作った、おもしろ外変データ集です。何の役にも立たないと思いますが。(^_^;)
目 次

検証3
 

とりあえずソース。(スマートなコードではありませんが、動作確認はしてあります。)
----- no3.bat -------------------------------

REM 金公の超初心者外変検証3
@echo off
REM #jww
REM #cd
REM #h4
REM #e
start /MIN /WAIT EXCEL.EXE no3.xls

--------------------------------------------

以下、Excel VBA no3.xls
----- オープンイベントマクロ --------

Option Explicit

Private Sub Workbook_Open()
    start
    Application.Quit
End Sub

----- 標準マクロ -----------------------------------------------------------

Option Explicit

Sub start()
  Dim TmpFile As String
  Dim FileNo As Integer
  Dim x1(3) As Double
  Dim x2(3) As Double
  Dim y1(3) As Double
  Dim y2(3) As Double
  Dim moji() As String
  Dim moji2 As String
  Dim i As Integer
  Dim j As Integer
  Dim Dchck As Boolean

  TmpFile = ThisWorkbook.Path & "\JWC_TEMP.TXT"
  If Dir(TmpFile, vbNormal) <> vbNullString Then
    i = 0
    FileNo = FreeFile
    Open TmpFile For Input As #FileNo
    Dchck = False
    Do While Not EOF(1)
      Line Input #FileNo, moji2
      If Dchck = True Then i = i + 1
      If moji2 = "#" Then Dchck = True
    Loop
    Close FileNo
    If i = 0 Then Exit Sub
    ReDim moji(i - 1)
    j = 0
    Dchck = False
    Open TmpFile For Input As #FileNo
    Do While Not EOF(1)
      Line Input #FileNo, moji2
      If Dchck = True Then
        moji2 = Trim(moji2)
        x1(0) = Val(Left(moji2, InStr(moji2, " ") - 1))
        moji2 = Mid(moji2, InStr(moji2, " ") + 1)
        y1(0) = Val(Left(moji2, InStr(moji2, " ") - 1))
        moji2 = Mid(moji2, InStr(moji2, " ") + 1)
        x2(0) = Val(Left(moji2, InStr(moji2, " ") - 1))
        y2(0) = Mid(moji2, InStr(moji2, " ") + 1)

        x1(1) = x1(0)
        y1(1) = y1(0)
        x2(1) = x1(0) + y1(0) - y2(0)
        y2(1) = y1(0) + x2(0) - x1(0)
        moji(j) = x1(1) & " " & y1(1) & " " & x2(1) & " " & y2(1)

        x1(2) = x2(0) + y1(0) - y2(0)
        y1(2) = y2(0) + x2(0) - x1(0)
        x2(2) = x2(0)
        y2(2) = y2(0)
        moji(j) = moji(j) & vbCrLf & x1(2) & " " & y1(2) & " " & x2(2) & " " & y2(2)

        x1(3) = x2(1)
        y1(3) = y2(1)
        x2(3) = x1(2)
        y2(3) = y1(2)
        moji(j) = moji(j) & vbCrLf & x1(3) & " " & y1(3) & " " & x2(3) & " " & y2(3)
        j = j + 1
      End If
      If moji2 = "#" Then Dchck = True
    Loop

    Close FileNo
    
    Open TmpFile For Output As #FileNo
    For j = 0 To i - 1
      Print #FileNo, moji(j)
    Next j

    Close #FileNo

  End If

End Sub

--------------------------------------------------------------------------

 

【 使用方法 】
 
■ 作成した [ no3.bat ] [ no3.xls ] を任意のフォルダへ保存。
■ Jw_cadに水平線 or 斜線 を1本〜複数本引いてください。
■ 外部変形 [ no3.bat ] を指定すると、今書いた直線を1辺とした正四角形を線の数だけ作画します。
■ バッチファイルからエクセルを起動して、オープンイベントマクロを実行したあとエクセルは消えます。
■ エクセルは見えないと思いますが、DOSプロンプトはエクセルの終了を待ちますので、少しの間DOS画面は表示されます。
■ エクセルを起動させる部分のコードは、金公のPCではちゃんと起動しますが、すべてのPCで起動するかどうかは自信がありません、その部分で起動しないときはFUMIさんのサイトから、「金公さんのSOFT」内の「JWWから外変で起動させるには」をご一読ください。
■ うまく動作しない、作り方が解らないの時は下の、 検証3 教材をダウンロードして動作をご確認下さい。
■ これは役に立たない検証用のサンプル外部変形です。役に立つ外部変形の作成を目指している方はご自分の手でソースを書き、テストされた方がより理解が深まると思います。
■ 金公はこれが限度です、Jw_cadを使わないのでアイデアすら出てきません。(^_^;)

 

検証3 教材ダウンロード 

外変検証3
( 9,895 byt )

エクセルでの外部変形プログラムに関心のある方は 検証3の解説 へどうぞ。

VBスクリプト版も作ってみました。金公も初めて挑戦してみましたがこちらの方が動きは軽いですね。 これからプログラムの勉強をされる方はこちらの方がいいです。ネットでの情報が豊富、こちらもただ、メモ帳でもプログラム出来る、いいことだらけです。

検証3 VBスクリプト版
教材ダウンロード

VBS外変検証3
( 901 byt )

 

 

目 次

検証4

開発環境でチョットしたアイデア発見

 


 

--- あとがき ---

エクセルで外部変形は速度は遅いし、他のスクリプト言語よりスマートさに欠けるように思われますが、応用は結構効くんじゃないかな〜、ワークシートのおまけも付いているしワークシート関数だって使えるモンね。
VBAは使えるけど他の言語は知らないっていう金公と似たような人はVBAでの外部変形もいいんじゃないでしょうか?

エクセルで気軽に作られた外部変形プログラムの作品がより多く世の中に出来てくることを密かに願っています。

 

目 次
金公の間違いに気づかれた方は、掲示板にて教えてくださいね。m(_ _)m
すぐに書き直すようにしたいと思います。

Home

 


Copyright (C) 2003/3 F.Tohyama, All rights reserved.


あなたは累計
人目の訪問者です。

(本日は   番目のアクセスです。 また昨日は 人のご来場者がありました)