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

[dennou-ruby:003551] GGraph.vectorでflow_vect_anyprojが呼ばれるときkeepが効かない



中野です。

GGraph.vectorでは
opts['flow_vect_anyproj'] ||
           ( opts['flow_vect_anyproj'].nil? && opts['flow_vect'] && itr >=2 )
がtrueのとき
DCLExt.flow_vect_anyproj
が呼ばれることになっています。

DCLExt.flow_vect_anyprojが呼ばれてかつ、keep=>trueのとき、
次にGGraph.vectorが呼ばれたときに
描画される単位ベクトルの長さは変わらないのですが、
それが意味するベクトルの大きさが変わっていました。

単位ベクトルの長さ意味するベクトルの大きさがが変わらないように修正しましたので
パッチを送ります。

これが意図する動作なのかよくわかりませんが、
もしよかったら取り込んでいただけますと幸いです。



--- ggraph.rb.org       2012-04-20 11:06:28.458580226 +0900
+++ ggraph.rb   2012-04-20 12:55:51.890580151 +0900
@@ -2948,6 +2948,7 @@
    @@vxfxratio=nil    # for flow_vect
    @@vyfyratio=nil    # for flow_vect
    @@vfratio=nil      # for flow_vect_anyproj
+    @@flenmax=nil      # for flow_vect_anyproj

    @@vector_options = Misc::KeywordOptAutoHelp.new(
      ['title', nil, 'Title of the figure(if nil, internally determined)'],
@@ -2994,13 +2995,14 @@
        end
      elsif opts['flow_vect_anyproj'] ||
            ( opts['flow_vect_anyproj'].nil? && opts['flow_vect'] && itr >=2 )
-        @@vfratio, flenmax =
+       @@vfratio, @@flenmax =
            DCLExt.flow_vect_anyproj(fx.val, fy.val, xaxv, yaxv,
                                     opts['factor'], 1, 1,
opts['distvect_map'],
                                     (opts['keep'] && @@vfratio),
+                                     (opts['keep'] && @@flenmax),
                                     opts['polar_thinning'] )
        if opts['unit_vect']
-          len_unit = opts['len_unit'] || flenmax
+          len_unit = opts['len_unit'] || @@flenmax
          DCLExt.unit_vect_single(@@vfratio, len_unit)
        end
      elsif opts['flow_vect']


--- dclext.rb.org       2012-04-20 11:29:56.802634874 +0900
+++ dclext.rb   2012-04-20 12:46:21.230691944 +0900
@@ -1287,8 +1287,7 @@

    def flow_vect_anyproj(fx, fy, xg, yg,
                          factor=1.0, xintv=1, yintv=1,
-                          distvect_map=true, vfratio=nil, polar_thinning=nil)
-
+                          distvect_map=true, vfratio=nil,
flenmax=nil, polar_thinning=nil)
      #< parameters to handle singularity of the projection  >

      ddv = 0.3e-3  # Initial value for viewport sampling to find directions.
@@ -1355,8 +1354,13 @@
      else
        ux0,ux1,uy0,uy1 = wnd
      end
+
      flen = Misc::EMath.sqrt( fx*fx + fy*fy )
+
+      if !flenmax
      flenmax = flen.max
+      end
+
      if !vfratio
        vx0,vx1,vy0,vy1 = DCL.sgqvpt
        dvf = Math::sqrt( (vx1-vx0)*(vy1-vy0)/nx/ny )



--
Masuo NAKANO, PhD
Global Cloud-Resolving Modeling Research Team,
RIGC, JAMSTEC
3173-25 Showa-machi, Kanazawa-ku
Yokohama-city, 236-0001, JAPAN
TEL: +81-45-778-5616