« 文字種変更 | トップページ | ブラウザ選び »

2010年12月18日 (土)

円ソリッド

円/円弧にソリッド図形を作図するスプリクトです。
少し複雑な外部変形を作成する場合は、if 文を多用することになるので、
今回はその一例です。

Solid

スプリクト内に解説を記述していますが、awkファイルとしても利用できます。

##### 初期設定
BEGIN{
# 円周率π、
pi=atan2(0,-1)
# print文の数値制御
OFMT="%.15g"
}
###### 行処理
### 先頭フィールド"ci"にパターンマッチング
/^ci/{
    ### フィールド数(円4、円弧8)によって条件分岐
    # 円データを円ソリッドデータに変換
    if(NF==4){
        $1="sc";$5=1;$6=0;$7=0;$8=2*pi;$9=100
        print $1,$2,$3,$4,$5,$6,$7,$8,$9
        }
    # 円弧データを弓形ソリッドデータに変換
    if(NF==8){
        ### 楕円/楕円弧/軸角のあるデータを除外
        # 対象外図形があると、画面左にメッセージを表示して終了
        if($7!=1 || $8!=0){print "he対象外図形があります";exit}
        #       
        ### 終了角が開始角より大きい場合
        if($6>$5){
            # 開始角が180°以上を条件分岐
            # 角度単位をラジアンに変換
            if($5<180){$7=$5*pi/180}
            if($5>=180){$7=($5-360)*pi/180}
            $8=($6-$5)*pi/180
            }
        ### 終了角が開始角より小さい場合
        if($6<$5){
            if($5<180){$7=$5*pi/180}
            if($5>=180){$7=($5-360)*pi/180}
            $8=(360+$6-$5)*pi/180
            }
        ### 円ソリッド/扁平率/傾角/円フラグ(弓形)を指定
        $1="sc";$5=1;$6=0;$9=5
        }
    ### 行毎に変換したデータを出力
    print $1,$2,$3,$4,$5,$6,$7,$8,$9
    }
##########
# <円データ>
# ci %lg %lg %lg  ( x y r )
# <円弧(楕円/楕円弧)データ>
# ci %lg %lg %lg %lg %lg %lg %lg ( x y r 始角 終角 偏平率 軸角 )
# <円ソリッドデータ>
# sc %lg %lg %lg %lg %lg %lg %lg %lg ( x y r 偏平率 傾角 始角 円弧角 円フラグ)
# 角度の単位はラジアン、円フラグは円が「100」、弓形が「5」、扇形が「0」

一行スプリクトに編集したバッチファイルです。
エラーメッセージを表示させる為、#hr の繰返し指定は記述していません。

@REM 円ソリッド
@echo off
REM #jww
REM #cd
REM #h1 範囲内のデータのみを選択
REM #hc 範囲選択から左AM0時「確定 基点(free)」
REM #e
jgawk 'BEGIN{pi=atan2(0,-1);OFMT="%%.15g"}/^^ci/{if(NF==4){$1="sc";$5=1;$6=0;$7=0;$8=2*pi;$9=100;print $1,$2,$3,$4,$5,$6,$7,$8,$9}if(NF==8){if($7!=1 ^|^| $8!=0){print "he対象外図形があります";exit}if($6^>$5){if($5^<180){$7=$5*pi/180}if($5^>=180){$7=($5-360)*pi/180};$8=($6-$5)*pi/180}if($6^<$5){if($5^<180){$7=$5*pi/180}if($5^>=180){$7=($5-360)*pi/180};$8=(360+$6-$5)*pi/180};$1="sc";$5=1;$6=0;$9=5};print $1,$2,$3,$4,$5,$6,$7,$8,$9}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
#####
範囲選択から左AM0時「確定 基点(free)」
:end

|

« 文字種変更 | トップページ | ブラウザ選び »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/94529/50335638

この記事へのトラックバック一覧です: 円ソリッド:

« 文字種変更 | トップページ | ブラウザ選び »