locked
Strokeの太さを変えずに拡大縮小 RRS feed

  • 質問

  • PathのStrokeの太さを変えないで拡大縮小する方法はないのでしょうか?
    RenderTransformで拡大縮小すると、線の太さも太くなったり細くなったりしてしまいますので。

    2009年3月25日 13:46

すべての返信

  • どの要素に対して、RenderTransform を使用しましたか?Path を描画する Canvas や Grid の Transform を指定していませんか?
    Jitta@わんくま同盟
    2009年4月1日 3:30
  • PathのRenderTransformメソッドを使用しています。
    2009年4月1日 8:31
  • 日にちが大分過ぎていますが・・。
    RenderTransformは要素に対して変換を行うので、PathのRenderTransformを使用すればStrokeも同様に変換されます。
    単純な図形などであれば、Borderの子要素としてPathを配置し、PathのStroke代わりにBorderのBorderBrushを使用すればPathのRenderTransformの操作でも同様の結果は得られるかと思います。
    ただ、複雑なPathだと大変ですが・・。

    2009年5月19日 8:17
  • これは、そもそも Path を作成する際の座標値を変更(拡大・縮小するよう計算しなおす)する方がよいと思います。

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。


    マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 IT技術者アドバンス テクノロジー本部 デベロッパーエバンジェリズムグループ
    2009年5月20日 12:25
  • 忘れてた

    これは、そもそも Path を作成する際の座標値を変更(拡大・縮小するよう計算しなおす)する方がよいと思います。

    これ、思ったのですが、MatrixTransform で、拡縮と、回転または移動を同時に指定したとき、やっかいではないですか?

    「絵」を、拡大するときには、線も太くなっていいと思います。でも、「グラフ」や「図形」を拡大するときはどうでしょう?線まで太くなって欲しくはありません。別途拡縮用のメソッドを用意するより、線の太さをどうするかというモードがある方が、使いやすいように思います。


    以前、ASP.NET でグラフ表示に使ったとき、太くならなかったような気がしたのだけれど、気のせいだった。


    Jitta@わんくま同盟
    2009年6月29日 12:44
  • 返信が遅れてしまい申し訳ございません。

    >>和人さん
    Borderは外接矩形が描画されるだけで、BezierSegmentや、三角形といった図形を描画する時には適さないようです。

    >>大野さん
    RenderTransformがあって、なぜ単なるTransformがないのかが腑に落ちないのですが。
    現在、マウスで描画した図形をドラッグアンドドロップで移動や、サイズ変更をできるようにしているのですが、
    ドラッグアンドドロップ中ではRenderTransformで描画しておき、
    マウスアップされたときに現在操作を行っているPathSegmentのコピーをドラッグ後の座標
    (大野さんがおっしゃるとおりに再計算を行って)で作成しなおし、
    古いPathSegmentを削除後、改めてコピーしたPathSegmentを描画するということで対処しております。
    RenderTransformは、扱いやすいのですが、Strokeの太さが変わってしまいます。
    Strokeをクリックした場合と図形内部をクリックした場合とは別々の動作を行わせるために、
    Strokeの太さは変えずに図形のリサイズを行いたかったのです。

    >>Jittaさん
    そうですよね。
    Windows Formだったら、Path自体にMatrixかけられ、描画そのものはPathに依存しないものでとても扱いやすいですが、
    Silverlightになると、
    <Path><PathData><PathGeometry><PathFigure><PathFigure.Segments>ときて、ようやく描画実態エレメントである<PolyLineSegment>等を書くことができる。プログラムで書くにしてもこの階層構造に従い書かなければならない。
    Windows Formsと比べて非常にめんどくさくなったというのが私の印象です。


    • 編集済み ritto 2009年7月13日 3:11
    2009年7月13日 2:32