[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003578] Re: color_bar メソッドでカラーバーが描かれないときの挙動



辻野様・堀之内様

大塚です。

修正コードを見てみたのですが、メソッドから抜ける前に
パラメータを戻す必要があるというのであれば、
添付のパッチのようにする必要があるのではないでしょうか?

今のコードだと、カラーコードの端に欠損値を指定して
カラーバーの端を三角にしようとした場合には、
メソッドから抜けない場合でも、オプション指定したパラメータを、
カラーバーを書く前に元に戻してしまうように見えます。

(まだ自分でテストコードを書いていないので、
意図した挙動かどうか分かりませんが、話の流れからの推測です。)

# このあたりのコードはもう少し整理しないと、他にもバグがありそうです。

(2012/06/26 23:55), Takeshi Horinouchi wrote:
> 辻野さま:
> 
> ご指摘ありがとうございます.もちろん意図してない動作です.
> とり急ぎ直して cvs commit しました -- 確認してみてください.
> 
> なお,別便で届いたと思いますが,ruby グループに加えたので
> cvs checkout できるはずです.今回の部分は該当箇所が書き換
> わってたので,少し違う形で対応しました.
> (が,パッチがあったので問題がわかりやすくてありがたかった
> です.)
> 
>> gphys 開発グループ御中,
>>
>> 名古屋大学の辻野です.
>>
>>
>> gphys-1.2.2 の dclext.rb 内のカラーバー描画メソッド
>> color_bar の挙動についてですが,
>> このメソッドはカラーで描く変数の最大最小値を比較し,
>> これらの値が同じ場合, カラーバーを描かないようになっています.
>>
>> しかし, color_bar 内で最大最小値の比較をする前に設定された
>> 文字の大きさ等が元の値に戻されることなくメソッドを抜けるので,
>> カラーバーが描かれない場合に限り, color_bar を複数呼び出すと,
>> その都度グラフ全体の文字の大きさが変わってしまいます.
>>
>> これはそういう仕様なのでしょうか.
>>
>> もし意図した挙動でないのであれば, メソッドを抜ける直前に
>> 文字設定等を元に戻す処理を施したパッチを以下に添付致しましたので,
>> 修正して頂ければと思います.
>>
>> 意図した挙動でしたら申し訳ございません.
>>
>> -- 
>> ------------------------
>> Satoki TSUJINO
>> Hydrospheric Atmospheric Research Center,
>> Nagoya University (JAPAN),
>> Furo-cho, Chikusa-ku, Nagoya-city,
>> ZIP : 464-8601
>> TEL : 81-52-789-3494
>> E-mail : satoki@xxxxxxxxxxxxxxxxxxxxxxxxx
>> URL : http://www.rain.hyarc.nagoya-u.ac.jp/~satoki/index.html
>> ------------------------
> 
> 堀之内 武
> 北海道大学 地球環境科学研究院 地球圏科学部門
> 〒060-0810 札幌市北区北10条西5丁目
> 


-- 
京都大学大学院理学研究科
気象学研究室
大塚成徳 (Shigenori OTSUKA)
email: otsuka@xxxxxxxxxxxxxxxxxx
tel: 075-753-3935


--- dclext.rb	26 Jun 2012 14:49:29 -0000	1.10
+++ dclext.rb	27 Jun 2012 02:46:05 -0000
@@ -1816,13 +1816,17 @@
       max = levels[levels.ne(rmiss).where].max
       if (inf0 = (levels[0] == rmiss))
         dummy1,dummy2,ipat0 = DCL::ueqtlv(1)
-        DCLExt.uz_set_params(axparam_bk)
-        return if levels.length==2
+        if levels.length==2
+          DCLExt.uz_set_params(axparam_bk)
+          return
+        end
       end
       if (inf1 = (levels[-1] == rmiss))
         dummy1,dummy2,ipat1 = DCL::ueqtlv(nton)
-        DCLExt.uz_set_params(axparam_bk)
-        return if levels.length==2
+        if levels.length==2
+          DCLExt.uz_set_params(axparam_bk)
+          return
+        end
       end
 
       # < paint color tones >