« 2010年11月 | トップページ | 2011年1月 »

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」

続きを読む "円ソリッド"

| | コメント (0) | トラックバック (0)

2010年12月15日 (水)

文字種変更

作図済の文字を指定して、文字種を変更するバッチファイルです。
行処理で、文字データを二次元配列 ch[i,j]に取込み、
END部で文字種(フォント)指定の後に文字データを書出します。

@REM 文字種変更
@echo off
REM #jww
REM #cd
REM #h3 範囲内の「文字」データのみを選択
REM #hc 範囲選択から文字を選択してください
REM #1ch 文字を指定してください
REM #e
type jwc_temp.txt
pause
jgawk 'BEGIN{OFMT="%%.15g";n=0}/^^lg/{culg=$1}/^^ly/{culy=$1}/^^cn/{if($1=="cn0"){cucn=$1 " " $2 " " $3 " " $4 " " $5;next}if(substr($1,4,1)=="$"){cuft=$1 " " $2}else{cucn=$1}}/^^ch/{n=n+1;ne=n;for(j=1;j^<=6;j++){ch[n,j]=$(j);ly[n]=culy}}END{print "hd";print cuft;;print cucn;for(i=1;i^<=ne-1;i++){print ly[i];print ch[i,1],ch[i,2],ch[i,3],ch[i,4],ch[i,5],ch[i,6]}print culg;print culy;print ch[ne,1],ch[ne,2],ch[ne,3],ch[ne,4],ch[ne,5],ch[ne,6]}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
type jwc_temp.txt
pause
del temp.txt
goto end
#####
範囲選択から左AM0時「確定 基点(free)」で文字選択
文字種(ユーザー文字)を指定する文字を(L)クリック
:end

◇/^^lg/{culg=$1}/^^ly/{culy=$1}
指定した文字のレイヤグループとレイヤを取得
◇/^^cn/{if($1=="cn0"){cucn=$1 " " $2 " " $3 " " $4 " " $5;next}
指定した文字が任意サイズの場合、幅/高さ/間隔/文字色を文字列として取得
◇if(substr($1,4,1)=="$"){cuft=$1 " " $2}
指定した文字のフォント名を文字列として取得
◇else{cucn=$1}}
"cn"にパターンマッチングした文字種を取得
◇/^^ch/{n=n+1;ne=n;for(j=1;j^<=6;j++){ch[n,j]=$(j)}}
行処理で範囲選択した文字データをn行、j列として二次元配列に取込
◇print ch[i,1],ch[i,2],ch[i,3],ch[i,4],ch[i,5],ch[i,6]
for文で列番号は指定して文字データを書出し

<レイヤグループ>
lg%x
<レイヤ>
ly%x
<文字種 1~10>
cn%d
<任意サイズ>
cn0 %lg %lg %lg %d  (幅 高さ 間隔 ペン番号)
<文字フォント>
cn"$<フォント名>

| | コメント (2) | トラックバック (0)

2010年12月12日 (日)

三角ソリッド

連続線の応用で三角ソリッドを作図するバッチファイルです。
外形線も同時に作図します。

<三角ソリッドデータ>
sl %lg %lg %lg %lg %lg %lg  (sl x1 y1 x2 y2 x3 y3)

@REM 三角ソリッド
@echo off
REM #jww
REM #cd
REM #1- 位置を指示してください (L)free (R)Read
REM #3#
REM #hr
REM #e
jgawk 'BEGIN{OFMT="%%.15g";n=0}/^^hp/{n=n+1;x[n]=$2;y[n]=$3}END{for(i=1;i^<=2;i++){print x[i],y[i],x[i+1],y[i+1]};print x[1],y[1],x[3],y[3];print "sl",x[1],y[1],x[2],y[2],x[3],y[3]}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
#####
#3# を記述すると、3番目までの点を指定
:end

| | コメント (0) | トラックバック (0)

2010年12月 4日 (土)

連続線作図

連続線を作図するバッチファイルです。
行処理で、指示した点の n 番目の座標値(x,y)を配列 x[n],y[n]に取込み
END部で"for文"を利用して線データに並び変えて出力します。

@REM 連続線
@echo off
REM #jww
REM #cd
REM #1- 位置を指示してください (L)free (R)Read
REM #99#
REM #hr
REM #e
jgawk 'BEGIN{OFMT="%%.15g";n=0}/^^hp/{n=n+1;ne=n;x[n]=$2;y[n]=$3}END{for(i=1;i^<=ne-1;i++){print x[i],y[i],x[i+1],y[i+1]}}' jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
#####
#99# を記述すると、任意点(99以下)の連続指示が可能
指示点の終了は、左AM0時「点指示終了」
:end

続きを読む "連続線作図"

| | コメント (0) | トラックバック (0)

« 2010年11月 | トップページ | 2011年1月 »