経緯
- 文字の基点や中点、枠線を描く外部変形
- 以前作ってjwwの掲示板にアップしたのが2007年7月
- 動作が怪しいということで見直してみます
外部変形
SJISで保存して使用してください
@REM 文字の基点に補助点を作図
@REM 文字起点.bat
@echo off
REM #jww
REM #cd
goto %1
REM #hm【文字基点】 |基準点|基点選択|文字枠|
REM #hc【文字基点】メニューを選択して下さい。
REM #:1
REM #bz
REM #zc
REM #ht10
REM #h3
REM #g1
REM #hc文字を選択
REM #e
REM #:2
REM #bz
REM #ht10
REM #h3
REM #g1
REM #hc文字を選択
REM #k 基点選択 |左下(L)|中下(R)|右下|左中|中中|右中|左上|中上|右上|/_K
REM #e
REM #:3
REM #bz
REM #ht10
REM #h3
REM #g1
REM #hc文字を選択
REM #e
:1
:2
:3
copy jwc_temp.txt jwc_temp.bak
ruby -Ks -x %~f0 %1 %2 > jwc_temp.txt
goto END
:COMENT
文字の基点に補助点を作図します
【基準点】 :もともとの基点に補助点を作成します。
【基点選択】:左下から右上のなかから基点を選択し、補助点を作成します。
【文字枠】 :補助線で文字枠を作成します。
:END
EXIT
~
#! ruby -Ks
require 'matrix'
$stderr=open("error.log","w")
opt=ARGV[0].to_i
# 基点の指定
if opt==1 #基準点
k=0
elsif opt==2 #基点選択
k=ARGV[1].sub(/^K/,"").to_i
elsif opt==3 #文字枠
k=10
end
hch,ch=[],0
File.open("jwc_temp.bak"){|f|
while line=f.gets
case line
when /^hq/
#puts "hd"
when /^hch/
hch=line.split.map{|e| e.to_f}
puts line
when /^cn\d+$/
cn=line.split
ch=cn[2].to_f if cn.size>1
ch=hch[cn[0][2..-1].to_i] if cn.size==1
puts line
when /^c[hvsropt]/
cs=line.chomp.split[1..-1].map{|e| e.to_f}
v0=Vector[cs[0],cs[1]]
va=Vector[cs[2],cs[3]]
vb=Matrix[[0,-1],[1,0]]*va
vb=vb*(ch/vb.r)
if k==10 #文字枠
puts "lc9"
puts " "+[v0.to_a,(v0+va).to_a].join(" ")
puts " "+[v0.to_a,(v0+vb).to_a].join(" ")
puts " "+[(v0+va).to_a,(v0+va+vb).to_a].join(" ")
puts " "+[(v0+vb).to_a,(v0+va+vb).to_a].join(" ")
else
vp=v0 if k<=1
vp=v0+va*0.5 if k==2
vp=v0+va if k==3
vp=v0+vb*0.5 if k==4
vp=v0+va*0.5+vb*0.5 if k==5
vp=v0+va+vb*0.5 if k==6
vp=v0+vb if k==7
vp=v0+va*0.5+vb if k==8
vp=v0+va+vb if k==9
puts "pn9"
puts "pt "+vp.to_a.join(" ")
end
else
print line
end
end}
注意点
- ruby1.8.7とruby2.6.5で動作を確認しています
コメント
sugiさん、こんにちは
banです。
2010年に入手した 文字枠と文字基点 があります。
多分、sugiさん作だと思います。
AFさんが、2.5D文字に関して検証なされていましたので、
when /^c[hvsropt]/ 部分を
when /^c[hvsroptkz2]/ に変更しましたら、
2.5D文字でも上手く動作しました。
又、
任意サイズの文字については、
when /^cn¥d/となっていて、問題ありませんでした。
付きましては、jww本家の方にスクリプトをUPしたいと思いますが
よろしいでしょうか?
事前に、ここに書き込んだほうがよろしいですか?
ああああぁぁぁ、すいません。
基本、放置のホームページでコメントがついてることが
分かってませんでした orz
当時作ったスクリプトが手元に残っていなくって
どういう処理をしてたんだろうってのは
我ながら疑問でもありました。
私のスクリプトに関しては一度発表したあとは
煮るなり焼くなり好きにしてって思ってますので
本家の方にアップして頂いても構いません。
というかかつて自分がどう処理してたのか知りたいので
むしろよろしくお願いします。
sugi さん、こんにちは。
72行目
when /^cn\d+$/
↓
when /^cn\d/
これで任意サイズ文字でも文字枠が作図出来ます。(掲示板で、下線になる、という話がありましたがこれで直ります) banさんがおっしゃっていた 2010年版では、「+$」は付いていないとの事です。
77行目
when /^c[hvsropt]/
↓
when /^c[hvsroptkz2]/
これで日影文字・2.5D文字にも作図出来ます。まぁ出来なくても私的には仕様だと納得できますが、banさん曰く「不具合」との事。そういう需要もあるんだろうか?あるんだろうなぁ「不具合」って言う位だもんなぁ。
というわけで誰もJWW掲示板ではコメントされてませんからこちらに一応報告入れておきます。
ではでは、作業、お疲れ様でした :)
AFさん、こんにちは。
自分としては質問に対してひとつひとつ本家に書き込むと
やたらとスレが伸びて迷惑だろうとか
かといって安易に5ch(AFさんは嫌いでしょうけど)に
誘導するのもどうだろうなんて思ってるうちに
hayabusaさんが新たなスクリプトをアップしてくださって
これで一件落着なんてつもりでいました。
なんだか正規表現の辺りが怪しいようで、もう一度見直してみます。
sugiさん こんばんは。
私が2010年頃に入手したスクリプトは下記の通りです。
多分 sugiさんがupしてくれた物だと思います。
尚、
when /^c[hvsropt]/ 部分は
when /^c[hvsroptkz2]/ に変更してあります。
———————————————-
@REM 文字枠と文字基点
@echo off
REM #jww
REM #cd
goto %1
REM #hm 【文字枠と文字基点】メニュー選択 |文字枠(L)|文字基点(R)|
REM #hc 【文字枠と文字基点】メニューを選択して下さい。
REM #:1
REM #bz
REM #ht10
REM #h3
REM #hc文字を選択
REM #i 色選択(無指定:カレント) |線色1|線色2|線色3|線色4|線色5|線色6|線色7|線色8|線色9|/_C
REM #e
REM #:2
REM #zc
REM #bz
REM #ht10
REM #h3
REM #hc文字を選択
REM #i 基点選択(無指定:デフォルト)|左下|中下|右下|左中|中中|右中|左上|中上|右上|/_K
REM #i 色選択(無指定:カレント) |線色1|線色2|線色3|線色4|線色5|線色6|線色7|線色8|線色9|/_C
REM #e
:1
:2
copy jwc_temp.txt temp.txt
ruby -Ks -x %~f0 %1 %2 %3
goto :EOF
#! ruby -Ks
$stderr=open(“error.log”,”w”)
$stdout=open(“jwc_temp.txt”,”w”)
require ‘matrix’
op=ARGV[0].to_i #オプション
kj=ARGV.find{|e| /^K(\d)/=~e} ? $1.to_i : 0 #基点
cl=ARGV.find{|e| /^C(\d)/=~e} ? $1.to_i : 0 #線色+点色
# p op,kj,cl
open(“temp.txt”){|f|
while f.gets
case $_
when /^hq/
when /^hch/
hch=$_.split.map{|e| e.to_f}
puts $_
when /^cn\d/
cn=$_.split
ch=cn[2].to_f if cn.size>1
ch=hch[cn[0][2..-1].to_i] if cn.size==1
#puts $_
when /^lc(\d+)$/
if cl==0
puts “lc”+$1
puts “pn”+$1
else
puts “lc#{cl}”
puts “pn#{cl}”
end
when /^cc([0-8])/
cc=$1.to_i
when /^c[hvsroptkz2]/
cs=$_.chomp.split[1..-1].map{|e| e.to_f}
v0=Vector[cs[0],cs[1]] #始点
va=Vector[cs[2],cs[3]] #方向
vb=Matrix[[0,-1],[1,0]]*va #高さ
vb=vb*(ch/vb.r)
if op==1 #文字枠
puts (v0.to_a+(v0+va).to_a).join(” “)
puts (v0.to_a+(v0+vb).to_a).join(” “)
puts ((v0+vb).to_a+(v0+va+vb).to_a).join(” “)
puts ((v0+va+vb).to_a+(v0+va).to_a).join(” “)
elsif op==2 #文字基点
vc=Vector[0,0] #左下
vc=va*0.5 if cc==1 #中下
vc=va if cc==2 #右下
vc=vb*0.5 if cc==3 #左中
vc=vb*0.5+va*0.5 if cc==4 #中中
vc=vb*0.5+va if cc==5 #右中
vc=vb if cc==6 #左上
vc=vb+va*0.5 if cc==7 #中上
vc=vb+va if cc==8 #右上
puts “pt “+v0.to_a.join(” “) if kj==0 #デフォルト
puts “pt “+(v0-vc).to_a.join(” “) if kj==1 #左下
puts “pt “+(v0+va*0.5-vc).to_a.join(” “) if kj==2 #中下
puts “pt “+(v0+va-vc).to_a.join(” “) if kj==3 #右下
puts “pt “+(v0+vb*0.5-vc).to_a.join(” “) if kj==4 #左中
puts “pt “+(v0+va*0.5+vb*0.5-vc).to_a.join(” “) if kj==5 #中中
puts “pt “+(v0+va+vb*0.5-vc).to_a.join(” “) if kj==6 #右中
puts “pt “+(v0+vb-vc).to_a.join(” “) if kj==7 #左上
puts “pt “+(v0+va*0.5+vb-vc).to_a.join(” “) if kj==8 #中上
puts “pt “+(v0+va+vb-vc).to_a.join(” “) if kj==9 #右上
end
else
print $_
end
end}
——————————
以上です。