ä»åã§4ç« ã®æç»ãªãã¸ã§ã¯ãã¯æå¾ã«ãã¾ããé·ãã£ã...ã

Windows Presentation Foundationãããã°ã©ãã³ã°å ¥é
- ä½è : 赤åç²é³
- åºç社/ã¡ã¼ã«ã¼: ç§åã·ã¹ãã
- çºå£²æ¥: 2007/04/26
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 2人 ã¯ãªãã¯: 19å
- ãã®ååãå«ãããã° (18ä»¶) ãè¦ã
4.8ããã¹
åç´ãªå½¢ç¶ã§ã¯è¡¨ç¾åºæ¥ãªã(è¤æ°ã®å³å½¢ã®çµã¿åãããªã©)ã±ã¼ã¹ã«ã¯Pathã¯ã©ã¹ãå©ç¨ãã¾ãã
Pathã¯ã©ã¹ã®Dataããããã£ã使ç¨ãã¾ãã
GeometryGroupã¯ã©ã¹ã使ã£ãå³å½¢ã®çµã¿åãã
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Shapes; class Test { [STAThread] public static void Main(){ int iFlag = 0; Rect rct1 = new Rect( 10, 10, 300, 200); Rect rct2 = new Rect(210, 10, 300, 200); EllipseGeometry elp1 = new EllipseGeometry(rct1); EllipseGeometry elp2 = new EllipseGeometry(rct2); Button btnChange = new Button(); btnChange.Content = "è²ã夿´"; btnChange.FontSize = 12; GeometryGroup gg = new GeometryGroup(); gg.Children.Add(elp1); gg.Children.Add(elp2); Path pt = new Path(); pt.Data = gg; pt.Fill = Brushes.Red; btnChange.Click += (sender, e) => { if (++iFlag % 3 == 0){ if (gg.FillRule == FillRule.Nonzero) gg.FillRule = FillRule.EvenOdd; else if (gg.FillRule == FillRule.EvenOdd) gg.FillRule = FillRule.Nonzero; } if (pt.Fill == Brushes.Red) pt.Fill = Brushes.Blue; else if (pt.Fill == Brushes.Blue) pt.Fill = Brushes.Pink; else if (pt.Fill == Brushes.Pink) pt.Fill = Brushes.Red; }; Canvas cnvs = new Canvas(); cnvs.Children.Add(pt); cnvs.Children.Add(btnChange); Window wnd = new Window(); wnd.Content = cnvs; Application app = new Application(); app.Run(wnd); } }
ããã¾ãã³ã³ãã¤ã«ãã¦å®è¡ãã¦ã¿ã¾ãã
ç»é¢ã«æ¥åãéãªãåã£ã赤ãå³å½¢ã表示ããã¾ããæ¥åã®éãªãåã£ã¦ããé¨åã¯å¡ãã¤ã¶ããã¦ãã¾ããããããã¯GeometryGroupã¯ã©ã¹ã®FillRuleããããã£ã«EvenOddãæå®ãã¦ããããã§ãã
å·¦ä¸ã®ãã¿ã³ãæ¼ããã³ã«æ¥åã®è²ãå¤ããã¾ãã
ããã«ãã¿ã³ãæ¼ãã¨ãå¡ãã¤ã¶ãã®è²ãèµ¤ã«æ»ããããã«FillRuleããããã£ã®å¤ãNonzeroã«å¤ããããã«å¡ãã¤ã¶ããã¿ã¼ã³ãå¤ããã¾ããå ·ä½çã«ã¯EvenOddã®æã«ã¯å¡ãã¤ã¶ãããªãã£ãéãåããã®é¨åãå¡ãã¤ã¶ããã¦ããã¨ããç¹ã§ãã
ãããªæãã§å³å½¢ã®éãããããå¯è½ã§ãã
CombinedGeometryã¯ã©ã¹ã使ã£ãå³å½¢ã®çµå
GemetryGroupã¯ã©ã¹ãè¤æ°ã®å³å½¢ã追å ãã¦çµã¿åãããã®å¯¾ãã¦ãCombinedGeometryã¯ã©ã¹ã¯2ã¤ã®Geometryãçµåãã¦å³å½¢ã使ãã¾ãã
CombinedGeometryã¯ã©ã¹ã«ã¯Geometry1,Geometry2ããããã£ãåå¨ãããããããçµåãã対象ã®å³å½¢ã¨ãªãã¾ãã
ã¾ãCombinedGeometryã¯ã©ã¹ã«ã¯ãGeometryCombineModeã¨ããåæåã®ããããã£ãåå¨ãã2ã¤ã®å³å½¢ã®çµåæ¼ç®ãæå®ãã¾ãã
| ã¡ã³ã | 説æ |
|---|---|
| Exclude | Geometry1ã«å«ã¾ãã¦ãã¦Geometry2ã«å«ã¾ãã¦ããªãé¨åãå¡ãã¤ã¶ã |
| Intersect | Geometry1,Geometry2ã®éãªã£ã¦ããé¨åã®ã¿ãå¡ãã¤ã¶ã |
| Union | Geometry1,Geometry2両é åãå¡ãã¤ã¶ã |
| Xor | Geometry1,Geometry2両é åãå¡ãã¤ã¶ã(ãã ãéãªã£ã¦ããé¨åã¯å¡ãã¤ã¶ããªã) |
ãã®ããããã£ã®éããç°¡åãªããã°ã©ã ã§èª¬æãã¾ãã
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Shapes; class Test { [STAThread] public static void Main(){ Rect rct1 = new Rect( 10, 10, 300, 200); Rect rct2 = new Rect(210, 10, 300, 200); EllipseGeometry elp1 = new EllipseGeometry(rct1); EllipseGeometry elp2 = new EllipseGeometry(rct2); Button btnChange = new Button(); btnChange.Content = "Intersectã«å¤æ´"; btnChange.FontSize = 12; CombinedGeometry gg = new CombinedGeometry(elp1,elp2); gg.GeometryCombineMode = GeometryCombineMode.Exclude; Path pt = new Path(); pt.Data = gg; pt.Fill = Brushes.Red; btnChange.Click += (sender, e) => { if (gg.GeometryCombineMode == GeometryCombineMode.Exclude){ gg.GeometryCombineMode = GeometryCombineMode.Intersect; btnChange.Content = "Unionã«å¤æ´"; } else if (gg.GeometryCombineMode == GeometryCombineMode.Intersect){ gg.GeometryCombineMode = GeometryCombineMode.Union; btnChange.Content = "Xorã«å¤æ´"; } else if (gg.GeometryCombineMode == GeometryCombineMode.Union){ gg.GeometryCombineMode = GeometryCombineMode.Xor; btnChange.Content = "Excludeã«å¤æ´"; } else if (gg.GeometryCombineMode == GeometryCombineMode.Xor){ gg.GeometryCombineMode = GeometryCombineMode.Exclude; btnChange.Content = "Intersectã«å¤æ´"; } }; Canvas cnvs = new Canvas(); cnvs.Children.Add(pt); cnvs.Children.Add(btnChange); Window wnd = new Window(); wnd.Background = Brushes.Pink; wnd.Content = cnvs; Application app = new Application(); app.Run(wnd); } }
ã§ããããæ©éã³ã³ãã¤ã«ãã¦å®è¡ã
æåã¯Excludeãè¨å®ããã¦ããããã«Geometry2ã®åãæããå¡ãã¤ã¶ãã¨ãªã£ã¦ãã¾ãã
ä¸åº¦ãã¿ã³ãæ¼ãã¾ãã
Intersectãè¨å®ãããã®ã§ãéãåããã£ãé¨åã®ã¿å¡ãã¤ã¶ããã¾ãã
ããã«ããä¸åº¦ãã¿ã³ãæ¼ãã¾ãã
Unionã«è¨å®ãããã®ã§å
¨é¨å¡ãã¤ã¶ããã¾ãã
æå¾ã«ããä¸åº¦ãã¿ã³ãæ¼ãã¾ãã
Xorã«è¨å®ãããã®ã§éããã£ãé¨å以å¤ãå¡ãã¤ã¶ããã¾ãã
CombinedGeomeotryã使ãã¨ãã®ãããªæç»ãå¯è½ã¨ãªãã¾ãã
4.9 æ²ç·
æ²ç·/ç´ç·ãæç»ããããã«ã¯PathGeometryã¯ã©ã¹ã使ç¨ãã¾ãã
ããã¾ãç°¡åãªãµã³ãã«ãä½ã£ã¦ã¿ã¾ãã
using System; using System.Windows; using System.Windows.Shapes; using System.Windows.Media; class Test { [STAThread] public static void Main(){ // ç´ç· // LineSegment ln1 = new LineSegment(); LineSegment ln2 = new LineSegment(); ln1.Point = new Point(410, 210); ln2.Point = new Point( 10, 210); // ãã¸ã§æ²ç· // BezierSegment bz = new BezierSegment(); bz.Point1 = new Point(360 , 10); bz.Point2 = new Point(480 , 310); bz.Point3 = new Point(640 , 150); // PathFigureã«ã»ã°ã¡ã³ãã追å // PathFigure pf = new PathFigure(); pf.StartPoint = new Point(210, 10); pf.Segments.Add(ln1); pf.Segments.Add(ln2); pf.Segments.Add(bz); PathGeometry pg = new PathGeometry(); pg.Figures.Add(pf); Path pt = new Path(); pt.Data = pg; pt.Stroke = Brushes.Black; Window wnd = new Window(); wnd.Content = pt; wnd.Background = Brushes.Pink; Application app = new Application(); app.Run(wnd); } }
ãã£ããã³ã³ãã¤ã«ãã¦å®è¡ãã¾ãã
ç´ç·ã§æå®ããé¨åã¨ãã¸ã§æ²ç·ãæç»ããã¦ãã¾ãã
LineSegmentã¯ã©ã¹ã¨BezerSegmentã¯ã©ã¹ã¯åã
ä¸ããããããããã£ã¯ç°ãªãã¾ãã
ä¾ãã°ãLineSegmentã¯ã©ã¹ã¯ç´ç·ã¯å§ç¹/çµç¹ãæå®ããå¿
è¦ãããã®ã«å¯¾ãã¦ãBezerSegmentã¯å¶å¾¡ç¹4ã¤ã®ãã¡3ã¤ãæå®ããå¿
è¦ãããã¾ã*1ã
ãã ãã両è
å
±ã«PathGeometryã«è¿½å ãããã¨ãåºæ¥ããªã©æç»ã«é¢ããæ±ãã¯ã¾ã£ããåçã§ãã
4.10ã座æ¨å¤æ
4.11ãç´æ¥æç»
ä¸è¨ã¯çµæ§ããªã¥ã¼ã ãããä¸ã«ããã«ä½¿ãé¨åã§ããªãããã ããæ£ç´ãã¾ãããããããªããããªã®ã§ãä»å¾å¿ è¦ã«ãªã£ãã¿ã¤ãã³ã°ã§åå¼·ãã¾ãã
ããªãå¼·å¼ã§ããããã§4ç« ã¯ã²ã¨ã¾ãçµäºã§ãã
次åã¯5ç« ã®ã¤ãã³ãã«ã¤ãã¦ã¾ã¨ãã¾ãã
*1:æåã®å¶å¾¡ç¹ã¯åã®ã»ã°ã¡ã³ãã®çµç¹ãèªåã§å²ãå½ã¦ããã¾ã









