مشاركة عبر


نظرة عامة على هندسة

توضح هذه المقالة نظرة عامة حول كيفية استخدام فئات Windows Presentation Foundation (WPF) Geometryلوصف الأشكال. يبين هذا الموضوع أيضاً الاختلافات بين كائنات Geometry و عناصر Shape .

يشتمل هذا الموضوع على الأقسام التالية.

  • ما هي محتويات الهندسي
  • أو geometries.أشكال
  • الخصائص الشائعة صواب التي تحتاج إلى هندسة
  • أنواع الهندسية البسيطة
  • مسار الهندسات
  • Geometries مركّبة
  • الهندسات المدمجة
  • ميزات القابل للتجميد
  • ميزات هندسية أخرى
  • موضوعات ذات صلة

ما هي محتويات الهندسي

توفر فئة Geometry والفئات التي تنحدر منها , مثل EllipseGeometry ، PathGeometry ، و CombinedGeometry ، لك القدرة لوصف هندسة الأشكال ثنائية الأبعاد. تلك الأوصاف الهندسية لها استخدامات عديدة مثل تعريف شكل مثل الرسم على الشاشة أو تعريف مناطق اختبار التوصل و القصاصة . يمكنك حتى استخدام الهندسة لتعريف مسار الحركة.

كائنات Geometryيمكن أن تكون بسيطة مثل المستطيلات و الدوائر أو, مركبة يتم إنشائها من اثنين أو أكثر من كائنات الهندسة. يمكن إنشاء هندسات أكثر تعقيداً وذلك باستخدام فئات PathGeometry و StreamGeometry والتي تتيح لك وصف الأقواس و المنحنيات.

لأن Geometry نوع من كائنات Freezable ، Geometry توفر عدة ميزات خاصة: يمكن تعريفهم كـ موارد ، تم مشاركتها بين عدة كائنات ، تم إجراءها للقراءة فقط لتحسين الأداء ، تم استنساخها وتم اجراءها كمؤشر الترابط - الآمن. للحصول على مزيد من المعلومات حول الميزات المختلفة المتوفرة من قبل كائنات Freezable ، راجع نظرة عامة حول الكائنات المجمدة.

أو geometries.أشكال

فئات Geometry و Shape تبدو مشابهة في إن كلاهما يقومان بوصف الأشكال ثنائية الأبعاد (مقارنة EllipseGeometry و Ellipse على سبيل المثال) ، لكن هناك اختلافات الهامة.

لواحدة ، ترث فئة Geometry من الفئة Freezable بينما ترث الفئة Shape من FrameworkElement. لأنها عناصر ، فإن كائنات Shape يمكنها تقديم نفسها و المشاركة في نظام التخطيط بينما لا تستطيع كائنات Geometry .

على الرغم من أن كائنات Shape هي أكثر استعداداً للاستخدام من كائنات Geometry ، فإن كائنات Geometry هي أكثر استعمالاً. بينما يتم استخدام كائن Shape لتقديم رسومات ثنائيية الأبعاد ، فإن كائن Geometry يتم استخدامه لتعريف المنطقة الهندسية للرسومات الثنائية ، تعريف منطقة لقطة أوتعريف منطقة اختبار عدد مرات الدخول ، للحصول على مثال.

شكل المسار

Shape واحد ، تستخدم الفئة Path بالفعل Geometry لوصف المحتويات الخاصة به. بواسطة تعيين الخاصية Data الخاصة بــ Path بـ Geometry وإعداد خصائص Fill و Stroke الخاصة به ، يمكنك تقديم Geometry.

الخصائص الشائعة صواب التي تحتاج إلى هندسة

المقاطع السابقة ذكرت إنه يمكن استخدام كائنات الهندسة مع كائنات أخرى للعديد من الأغراض، مثل رسم الأشكال و الحركات و الاقتصاص. يسرد الجدول التالي عدة فئات تحتوي على خصائص تأخذ كائن Geometry .

Type

الخصائص

DoubleAnimationUsingPath

PathGeometry

DrawingGroup

ClipGeometry

GeometryDrawing

Geometry

Path

Data

UIElement

Clip

أنواع الهندسية البسيطة

الفئة الأساسية لكافة الهندسات هي فئة Geometry المجردة . الفئات التي يتم اشتقاقها من فئة Geometry يمكن تجميعها تقريباً إلى ثلاث فئات: الهندسات البسيطة ، هندسات المسار و الهندسات المركبة.

تتضمن فئات الهندسة البسيطة LineGeometry ، RectangleGeometry ، و EllipseGeometry ويتم استخدامها لإنشاء أشكال هندسية أساسية مثل الخطوط ، المستطيلات و الدوائر.

  • LineGeometry معرّفة بواسطة تحديد نقطة بدء الخط والانتهاء من الخط .

  • RectangleGeometry يتم تعريفها ببنية Rect الذي يعيّن موقعها النسبي الخاص بها و ارتفاعها و عرضها . يمكنك إنشاء مستطيل مستدير الزوايا بواسطة إعداد خصائص RadiusX و RadiusY .

  • EllipseGeometry معرفة بواسطة المركز ،نصف قطر س و نصف قطر ص . تبين الأمثلة التالية كيفية إنشاء هندسات بسيطة للتقديم و لأخذ لقطات.

هذه الأشكال نفسها ، تماماً مثل الأشكال الأكثر تعقيداً ، يمكن إنشاءها باستخدام PathGeometry أو عن طريق هندسة دمج الكائنات معاً ، ولكن هذه الفئات تقوم بتوفير وسيلة أسهل بالنسبة لإنتاج هذه الأشكال الأساسية الهندسية .

يوضح المثال التالي كيفية إنشاء وعرض LineGeometry. كما هو موضح سابقاً، فإن كائن Geometry يتعذر عليه رسم نفسه بحيث يستخدم المثال شكل Path لتقديم سطر. بسبب إن الخط لا منطقة له ، إعداد خاصية Fill الخاصة بــ Path لا تأثير له; بدلاً من ذلك فقط خصائص Stroke و StrokeThickness يتم تحديدها . يبين الشرح التالي النتاج من هذا المثال.

خط هندسى مرسوم من (10 ، 50) إلى (200, 70)

LineGeometry

<Path Stroke="Black" StrokeThickness="1" >
  <Path.Data>
    <LineGeometry StartPoint="10,20" EndPoint="100,130" />
  </Path.Data>
</Path>
            Dim myLineGeometry As New LineGeometry()
            myLineGeometry.StartPoint = New Point(10,20)
            myLineGeometry.EndPoint = New Point(100,130)

            Dim myPath As New Path()
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            myPath.Data = myLineGeometry
LineGeometry myLineGeometry = new LineGeometry();
myLineGeometry.StartPoint = new Point(10,20);
myLineGeometry.EndPoint = new Point(100,130);

Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myLineGeometry;

يوضح المثال التالي كيفية إنشاء وتقديم EllipseGeometry. الأمثلة التعيين s Centerمن EllipseGeometryهو التعيين إلى النقطة 50,50والقطر x و y-RADIUS كل من التعيين إلى 50، الذي يقوم بإنشاء دائرة بقطر 100. الجزء الداخلي من القطع الناقص هو تلوين بتعيين القيمة لخاصية التعبئة لمسار العنصر في ترتيب هو الحالة Gold. يبين الشرح التالي النتاج من هذا المثال.

هندسة قطع ناقص رسم في (50,50)

EllipseGeometry

<Path Fill="Gold" Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <EllipseGeometry Center="50,50" RadiusX="50" RadiusY="50" />
  </Path.Data>
</Path>
            Dim myEllipseGeometry As New EllipseGeometry()
            myEllipseGeometry.Center = New Point(50, 50)
            myEllipseGeometry.RadiusX = 50
            myEllipseGeometry.RadiusY = 50

            Dim myPath As New Path()
            myPath.Fill = Brushes.Gold
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            myPath.Data = myEllipseGeometry
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new Point(50, 50);
myEllipseGeometry.RadiusX = 50;
myEllipseGeometry.RadiusY = 50;

Path myPath = new Path();
myPath.Fill = Brushes.Gold;
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myEllipseGeometry;

يوضح المثال التالي كيفية إنشاء وعرض RectangleGeometry. موضع و أبعاد المستطيل معرفة بواسطة بنية Rect . يكون الموضع 50,50 و الارتفاع والعرض كليهما 25 ، والذي ينشئ مربع. يبين الشرح التالي النتاج من هذا المثال.

هندسة المستطيل رسم في 50,50

RectangleGeometry

<Path Fill="LemonChiffon" Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <RectangleGeometry Rect="50,50,25,25" />
  </Path.Data>
</Path>
            Dim myRectangleGeometry As New RectangleGeometry()
            myRectangleGeometry.Rect = New Rect(50,50,25,25)

            Dim myPath As New Path()
            myPath.Fill = Brushes.LemonChiffon
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            myPath.Data = myRectangleGeometry
RectangleGeometry myRectangleGeometry = new RectangleGeometry();    
myRectangleGeometry.Rect = new Rect(50,50,25,25);

Path myPath = new Path();
myPath.Fill = Brushes.LemonChiffon;
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myRectangleGeometry;

المثال التالي يوضح كيفية استخدام EllipseGeometry كمنطقة القصاصة للصورة. Imageالكائن هو معرفة Widthمن 200 Heightمن 150. EllipseGeometryمع RadiusXالقيمة 100، RadiusYالقيمة 75، Centerالقيمة 100,75 هو معينة إلى Clipالخصائص للصورة. فقط الجزء الخاص بالصورة داخل المنطقة الخاصة بالقطع الناقص سيكون معروضاً. يبين الشرح التالي النتاج من هذا المثال.

هندسة القطع الناقص يتم استخدامه لقصاصة صورة لعنصر التحكم

صورة بها اقتصاص أو بدون اقتصاص

<Image
  Source="sampleImages\Waterlilies.jpg"
  Width="200" Height="150" HorizontalAlignment="Left">
  <Image.Clip>
    <EllipseGeometry
      RadiusX="100"
      RadiusY="75"
      Center="100,75"/>
  </Image.Clip>
</Image>

            ' Create the image to clip.
            Dim myImage As New Image()
            Dim imageUri As New Uri("C:\\Documents and Settings\\All Users\\Documents\My Pictures\\Sample Pictures\\Water lilies.jpg", UriKind.Relative)
            myImage.Source = New BitmapImage(imageUri)
            myImage.Width = 200
            myImage.Height = 150
            myImage.HorizontalAlignment = HorizontalAlignment.Left

            ' Use an EllipseGeometry to define the clip region. 
            Dim myEllipseGeometry As New EllipseGeometry()
            myEllipseGeometry.Center = New Point(100, 75)
            myEllipseGeometry.RadiusX = 100
            myEllipseGeometry.RadiusY = 75
            myImage.Clip = myEllipseGeometry


            // Create the image to clip.
            Image myImage = new Image();
            Uri imageUri = 
                new Uri(@"C:\\Documents and Settings\\All Users\\Documents\My Pictures\\Sample Pictures\\Water lilies.jpg", UriKind.Relative);
            myImage.Source = new BitmapImage(imageUri);
            myImage.Width = 200;
            myImage.Height = 150;
            myImage.HorizontalAlignment = HorizontalAlignment.Left;    

            // Use an EllipseGeometry to define the clip region. 
            EllipseGeometry myEllipseGeometry = new EllipseGeometry();
            myEllipseGeometry.Center = new Point(100, 75);
            myEllipseGeometry.RadiusX = 100;
            myEllipseGeometry.RadiusY = 75;
            myImage.Clip = myEllipseGeometry;

مسار الهندسات

الفئة PathGeometry و به المكافئة لها من المرتبة المنخفضة ، الفئة StreamGeometry توفر مكون معني لوصف رسومات معقدة متعددة من متكونة من أقواس ، والمنحنيات و الأسطر.

في قلب PathGeometry مجموعة من كائنات PathFigure تسمى بسبب وصف كل صورة لشكل منفصل في PathGeometry. كل PathFigure يكون نفسه يتكون من واحد أو أكثر من كائنات PathSegment ، كل منها تصف قطعة من الشكل.

هناك أنواع عديدة من القطع.

نوع القطعة

الوصف

المثال

ArcSegment

ينشئ قوس قطع ناقص بين نقطتين.

كيفية القيام بما يلي: إنشاء قوس قطع ناقص.

BezierSegment

إنشاء منحنى بيزيه المكعب بين نقطتين.

كيفية القيام بما يلي: انشاء منحنى Bezier مكعب.

LineSegment

ينشئ خط بين نقطتين.

كيفية القيام بما يلي: إنشاء LineSegment في PathGeometry

PolyBezierSegment

ينشيء سلسلة من منحنيات Bezier المكعبة.

راجع صفحة نوع PolyBezierSegment .

PolyLineSegment

يقوم بإنشاء سلسلة من الخطوط.

راجع صفحة نوع PolyLineSegment .

PolyQuadraticBezierSegment

يقوم بإنشاء سلسلة من المنحنيات Bezier التربيعية.

راجع صفحة PolyQuadraticBezierSegment .

QuadraticBezierSegment

يقوم بإنشاء منحنى بيزيه التربيعى

كيفية القيام بما يلي: إنشاء منحنى بيزيه التربيعى.

المقاطع داخل PathFigure يتم دمجها ضمن شكل هندسي واحد مع نقطة النهاية لكل مقطع تكون نقطة البدء للمقطع التالي. خاصية StartPoint الخاصة بـ PathFigure تقوم بتحديد نقطة منها يتم رسم المقطع الأول. يبدأ كل مقطع لاحق عند نقطة النهاية من المقطع السابق. على سبيل المثال، خط عمودي من 10,50 إلى 10,150 يمكن تعريفه بواسطة إعداد خاصية StartPoint إلى 10,50 وإنشاء LineSegment بإعداد خاصية Point من 10,150.

يقوم المثال التالي بإنشاء PathGeometryبسيط يتألف من PathFigureواحدة بــ LineSegment ويعرضه باستخدام العنصر Path . إن الكائن PathFigure الذي حتوي على StartPoint الذي يتم تعيينه إلى 10,20 و LineSegment يتم تعريفه إلى نقطة نهاية من 100,130. يبين الرسم التوضيحي التالي PathGeometry الذي تم إنشاؤه بواسطة هذا المثال.

PathGeometry يحتوي على LineSegment مفرد

LineGeometry

<Path Stroke="Black" StrokeThickness="1">
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigure StartPoint="10,20">
          <PathFigure.Segments>
            <LineSegment Point="100,130"/>
          </PathFigure.Segments>
        </PathFigure>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

            ' Create a figure that describes a 
            ' line from (10,20) to (100,130).
            Dim myPathFigure As New PathFigure()
            myPathFigure.StartPoint = New Point(10,20)
            myPathFigure.Segments.Add(New LineSegment(New Point(100,130), True)) ' IsStroked 

            ''' Create a PathGeometry to contain the figure.
            Dim myPathGeometry As New PathGeometry()
            myPathGeometry.Figures.Add(myPathFigure)

            ' Display the PathGeometry. 
            Dim myPath As New Path()
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            myPath.Data = myPathGeometry

// Create a figure that describes a 
// line from (10,20) to (100,130).
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,20);
myPathFigure.Segments.Add(
    new LineSegment(new Point(100,130),
    true /* IsStroked */ ));

/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;

وهو يستحق متباينة لهذا المثال بمثال LineGeometry السابق . بناء الجملة المستخدم على PathGeometry هو مطوّل أكثر من ذلك المستخدم لــ LineGeometry البسيط , ومن أنه قد يكون له معنى أكثر استخدام فئة LineGeometry في هذه الحالة، ولكن بناء جملة مطوّلة لــ PathGeometry يسمح بـمناطق هندسة معقدة للغاية .

يمكن إنشاء هندسات أكثر تعقيداً باستخدام تركيبة من كائنات PathSegment .

يستخدم المثال التالي على BezierSegment ، LineSegment ، و ArcSegment لإنشاء شكل. المثال أولاً ينشئ منحنى Bezier مكعب بواسطة تعريف أربعة نقاط: نقطة بدء والتي هي نقطة نهاية المقطع السابق ، نقطة نهاية ( Point3) ، و نقطتي تحكم ( Point1 و Point2). نقطتي تحكم منحنى Bezier المكعب يسلك مثل المغناطيس ، يشد الأجزاء والتي منها يمكن ان ينتج خط مستقيم باتجاه نفسها ، لإنتاج منحنى. نقطة التحكم الأولى، Point1 ، تؤثر على بداية جزء المنحنى; نقطة التحكم الثانية Point2 و تؤثر على الجزء الأخير من المنحنى.

المثال يضيف بعدها LineSegment ، الذي يتم رسمه بين نقطة نهاية و BezierSegment الذي يسبقه إلى النقطة المحددة بواسطة الخاصية LineSegment الخاصة به.

المثال يضيف بعدها ArcSegment ، الذي يتم رسمه من نقطة نهاية الخاصة بـ LineSegment السابقة إلى النقطة المحددة بواسطة خاصية Point الخاصة به. يحدد المثال أيضاً نصف القطر x و y-الخاصين بالقوس ( Size) ، زاوية الاستدارة ( RotationAngle) ، علامة تشير إلى أي مدى يجب أن يكون كبر حجم زاوية القوس الناتج ( IsLargeArc) ، و قيمة تشير إلى اتجاه رسم القوس ( SweepDirection). يبين الرسم التوضيحي التالي الشكل الذي تم إنشاؤه بواسطة هذا المثال.

PathGeometry

PathGeometry

<Path Stroke="Black" StrokeThickness="1" >
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigure StartPoint="10,50">
          <PathFigure.Segments>
            <BezierSegment
              Point1="100,0"
              Point2="200,200"
              Point3="300,100"/>
            <LineSegment Point="400,100" />
            <ArcSegment
              Size="50,50" RotationAngle="45"
              IsLargeArc="True" SweepDirection="Clockwise"
              Point="200,100"/>
          </PathFigure.Segments>
        </PathFigure>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

            ' Create a figure.
            Dim myPathFigure As New PathFigure()
            myPathFigure.StartPoint = New Point(10,50)
            myPathFigure.Segments.Add(New BezierSegment(New Point(100,0), New Point(200,200), New Point(300,100), True)) ' IsStroked 
            myPathFigure.Segments.Add(New LineSegment(New Point(400,100), True)) ' IsStroked 
            myPathFigure.Segments.Add(New ArcSegment(New Point(200,100), New Size(50,50), 45, True, SweepDirection.Clockwise, True)) ' IsStroked  -  IsLargeArc 

            ''' Create a PathGeometry to contain the figure.
            Dim myPathGeometry As New PathGeometry()
            myPathGeometry.Figures.Add(myPathFigure)

            ' Display the PathGeometry. 
            Dim myPath As New Path()
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            myPath.Data = myPathGeometry

// Create a figure.
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,50);
myPathFigure.Segments.Add(
    new BezierSegment(
        new Point(100,0),
        new Point(200,200),
        new Point(300,100),
        true /* IsStroked */  )); 
myPathFigure.Segments.Add(
    new LineSegment(
        new Point(400,100),
        true /* IsStroked */ ));
myPathFigure.Segments.Add(
    new ArcSegment(
        new Point(200,100),
        new Size(50,50),
        45,
        true, /* IsLargeArc */ 
        SweepDirection.Clockwise, 
        true /* IsStroked */ ));                       

/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;

يمكن إنشاء هندسات أكثر تعقيداً باستخدام كائنات PathFigure عديدة داخل PathGeometry.

يقوم المثال التالي بإنشاء PathGeometry بكائنين PathFigure ا كل منها يحتوي على كائنات PathSegment عديدة. PathFigure من المثال السابق و PathFigure مع PolyLineSegment و QuadraticBezierSegment يتم استخدامهم. PolyLineSegment يتم تعريفه بصفيف من النقاط و QuadraticBezierSegment يتم تعريفه بنقطة تحكم و نقطة نهاية. يبين الرسم التوضيحي التالي الشكل الذي تم إنشاؤه بواسطة هذا المثال.

PathGeometry بأرقام متعددة

PathGeometry

<Path Stroke="Black" StrokeThickness="1" >
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigure StartPoint="10,50">
          <PathFigure.Segments>
            <BezierSegment
              Point1="100,0"
              Point2="200,200"
              Point3="300,100"/>
            <LineSegment Point="400,100" />
            <ArcSegment
              Size="50,50" RotationAngle="45"
              IsLargeArc="True" SweepDirection="Clockwise"
              Point="200,100"/>
          </PathFigure.Segments>
        </PathFigure>

        <PathFigure StartPoint="10,100">
          <PathFigure.Segments>
            <PolyLineSegment Points="50,100 50,150" />
            <QuadraticBezierSegment Point1="200,200" Point2="300,100"/>
          </PathFigure.Segments>
        </PathFigure>                
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

            Dim myPathGeometry As New PathGeometry()

            ' Create a figure.
            Dim pathFigure1 As New PathFigure()
            pathFigure1.StartPoint = New Point(10,50)
            pathFigure1.Segments.Add(New BezierSegment(New Point(100,0), New Point(200,200), New Point(300,100), True)) ' IsStroked 
            pathFigure1.Segments.Add(New LineSegment(New Point(400,100), True)) ' IsStroked 
            pathFigure1.Segments.Add(New ArcSegment(New Point(200,100), New Size(50,50), 45, True, SweepDirection.Clockwise, True)) ' IsStroked  -  IsLargeArc 
            myPathGeometry.Figures.Add(pathFigure1)

            ' Create another figure.
            Dim pathFigure2 As New PathFigure()
            pathFigure2.StartPoint = New Point(10,100)
            Dim polyLinePointArray() As Point = { New Point(50, 100), New Point(50, 150)}
            Dim myPolyLineSegment As New PolyLineSegment()
            myPolyLineSegment.Points = New PointCollection(polyLinePointArray)
            pathFigure2.Segments.Add(myPolyLineSegment)
            pathFigure2.Segments.Add(New QuadraticBezierSegment(New Point(200,200), New Point(300,100), True)) ' IsStroked 
            myPathGeometry.Figures.Add(pathFigure2)

            ' Display the PathGeometry. 
            Dim myPath As New Path()
            myPath.Stroke = Brushes.Black
            myPath.StrokeThickness = 1
            myPath.Data = myPathGeometry

PathGeometry myPathGeometry = new PathGeometry();            

// Create a figure.
PathFigure pathFigure1 = new PathFigure();
pathFigure1.StartPoint = new Point(10,50);
pathFigure1.Segments.Add(
    new BezierSegment(
        new Point(100,0),
        new Point(200,200),
        new Point(300,100),
        true /* IsStroked */ )); 
pathFigure1.Segments.Add(
    new LineSegment(
        new Point(400,100),
        true /* IsStroked */ ));
pathFigure1.Segments.Add(
    new ArcSegment(
        new Point(200,100),
        new Size(50,50),
        45,
        true, /* IsLargeArc */
        SweepDirection.Clockwise, 
        true /* IsStroked */ ));
myPathGeometry.Figures.Add(pathFigure1);    

// Create another figure.
PathFigure pathFigure2 = new PathFigure();
pathFigure2.StartPoint = new Point(10,100);
Point[] polyLinePointArray = 
    new Point[]{ new Point(50, 100), new Point(50, 150)};
PolyLineSegment myPolyLineSegment = new PolyLineSegment();
myPolyLineSegment.Points = 
    new PointCollection(polyLinePointArray);
pathFigure2.Segments.Add(myPolyLineSegment);
pathFigure2.Segments.Add(
    new QuadraticBezierSegment(
        new Point(200,200),
        new Point(300,100),
        true /* IsStroked */ ));
myPathGeometry.Figures.Add(pathFigure2);

// Display the PathGeometry. 
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;

StreamGeometry

مثل فئة PathGeometry ، فإن StreamGeometry يحدد شكل هندسي معقد الذي يمكن أن يتضمن منحنيات أقواس ، و الأسطر. بعكس PathGeometry ، فإن محتويات StreamGeometry لا تعتمد ربط البيانات ، الحركة أو التعديل. استخدم StreamGeometry عندما تحتاج أن تصف هندسية معقدة ولكن لا تريد زيادة حمل دعم ربط البيانات, الحركة أو التعديل. نظرا لكفاءته، فئة StreamGeometry هو خيار جيد لوصف الهوامش.

على سبيل المثال ، راجع كيفية القيام بما يلي: إنشاء شكل باستخدام StreamGeometry.

سياق علامات المسار

أنواع PathGeometry و StreamGeometry تقوم بدعم بناء جملة سمة Extensible Application Markup Language (XAML) باستخدام سلسلة خاصة من أوامر النقل و الرسم . لمزيد من المعلومات، راجع سياق علامات المسار.

Geometries مركّبة

هندسة مركّبة يمكن إنشاؤها باستخدام GeometryGroup ، CombinedGeometry ، أو بواسطة استدعاء أسلوب Geometry الثابت Combine.

  • CombinedGeometryالكائن و Combineأسلوب تنفيذ عملية منطقية لضم المنطقة المعرفة من قبل جهازي geometries. Geometryيتم تجاهل الكائنات التي تحتوي على مساحة لا. فقط كائنين Geometry يمكن ضمهما (على الرغم من أنه قد تكون هذه الهندستين هندستين مركبين).

  • تقوم فئة GeometryGroup بإنشاء دمج لكائنات Geometry التي تحتوي عليها دون دمج المنطقة الخاصة بها. أي عدد من كائنات Geometry يمكن إضافته إلى GeometryGroup. على سبيل المثال ، راجع كيفية القيام بما يلي: إنشاء شكل مركب.

بسبب عدم تنفيذهم لعملية ضم ، استخدام كائنات GeometryGroup يوفر مزايا الأداء عبر استخدام كائنات CombinedGeometry أو الأسلوب Combine .

الهندسات المدمجة

المقطع السابق يذكر إن الكائن CombinedGeometry و الأسلوب Combine يقومان بدمج الناحية المعرّفة من قِبل الهندسات التي تحتويها. تعداد GeometryCombineMode يحدد كيفية دمج الهندسات. القيم المحتملة لخاصية GeometryCombineMode هي : Union و Intersect وExclude و Xor.

في المثال التالي ، CombinedGeometry يتم تعريفه بوضع مدمج من الاتحاد. كلا منGeometry1 و Geometry2 معرّفة كدوائر لها نفس نصف القطر ولكن مراكزهم مزاحة عن بعضها بمقدار 50.

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>

    <!-- Combines two geometries using the union combine mode. -->
    <CombinedGeometry GeometryCombineMode="Union">
      <CombinedGeometry.Geometry1>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
      </CombinedGeometry.Geometry1>
      <CombinedGeometry.Geometry2>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
      </CombinedGeometry.Geometry2>
    </CombinedGeometry>
  </Path.Data>
</Path>

نتائج توحيد وضع الدمج

في المثال التالي ، CombinedGeometry يتم تعريفه بوضع مدمج من Xor.. كلا منGeometry1 و Geometry2 معرّفة كدوائر لها نفس نصف القطر ولكن مراكزهم مزاحة عن بعضها بمقدار 50.

<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
  <Path.Data>

    <!-- Combines two geometries using the XOR combine mode. -->
    <CombinedGeometry GeometryCombineMode="Xor">
      <CombinedGeometry.Geometry1>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
      </CombinedGeometry.Geometry1>
      <CombinedGeometry.Geometry2>
        <EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
      </CombinedGeometry.Geometry2>
    </CombinedGeometry>
  </Path.Data>
</Path>

نتائج وضع الدمج Xor

لمزيد من الأمثلة، راجع كيفية القيام بما يلي: إنشاء شكل مركب و كيفية القيام بما يلي: إنشاء الهندسي المدمجة‬.

ميزات القابل للتجميد

بسبب أنه يرث من فئة Freezable ، فإن Geometry توفر العديد من الميزات الخاصة: يمكن تعريف كائنات Geometry كــنظرة عامة حول الموارد ، تم مشاركتها بين عدة كائنات ، تم إجراءها للقراءة فقط لتحسين الأداء ، تم استنساخها وتم اجراءها كمؤشر الترابط - الآمن. للحصول على مزيد من المعلومات حول الميزات المختلفة المتوفرة من قبل كائنات Freezable ، راجع نظرة عامة حول الكائنات المجمدة.

ميزات هندسية أخرى

توفر الفئة Geometry أساليب الأداة المساعدة المفيدة أيضاً مثل التالية:

  • GetArea-يحصل على ناحيةGeometry.

  • FillContains- يقوم بتحديد ما إذا كان الهندسي يحتوي على Geometry آخر.

  • StrokeContains-يقوم بتحديد ما إذا كان ضغط المفاتيح منGeometry يحتوي على النقطة المحددة.

راجع فئة Geometry للحصول على قائمة كاملة بالأساليب الخاصة به.

راجع أيضًا:

المرجع

Geometry

PathGeometry

Path

GeometryDrawing

المبادئ

أمثلية الأداء: الرسومات ثنائية الأبعاد و التصوير

سياق علامات المسار

نظرة عامة حول الحركة

الأشكال و الرسم الأساسي في نظرة عامة WPF

نظرة عامة حول كائنات الرسم

موارد أخرى

مواضيع How-to على ‏‫الهندسيات