مشاركة عبر


العمومية و محلي تحويلات

تحويل عمومي هو تحويل الذي يتم تطبيقه على كل عنصر يتم رسمها ب معطى Graphicsالكائن. في التباين، تحويل محلي هو تحويل الذي يتم تطبيقه على عنصر معين رسم.

تحويلات العمومية

إلى إنشاء تحويل عمومي، بناء على Graphicsالكائن، وبعدها التعامل مع به Transformخاصية. Transformخاصية هو Matrixكائن، بحيث يمكن أن يستوعب أي تسلسل من تحويلات affine. تحويل المخزنة في Transformالخاصية هو يدعى التحويل العالم. Graphicsتوفر الفئة العديد من الطرق لإنشاء لتحويل عالم مركب: MultiplyTransform و RotateTransform وScaleTransform و TranslateTransform. يلي مثال رسم قطع ناقص مرتين: مرة واحدة قبل إنشاء تحويل عالم و مرة واحدة بعد. التحويل أولاً قياس بعامل 0.5 في اتجاه y، ثم يقوم بترجمة وحدات 50 في اتجاه x، و ثم تقوم بتدوير 30 درجة.

        myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)
        myGraphics.ScaleTransform(1, 0.5F)
        myGraphics.TranslateTransform(50, 0, MatrixOrder.Append)
        myGraphics.RotateTransform(30, MatrixOrder.Append)
        myGraphics.DrawEllipse(myPen, 0, 0, 100, 50)

myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);
myGraphics.ScaleTransform(1, 0.5f);
myGraphics.TranslateTransform(50, 0, MatrixOrder.Append);
myGraphics.RotateTransform(30, MatrixOrder.Append);
myGraphics.DrawEllipse(myPen, 0, 0, 100, 50);

يبين المثال التالي التنظيمات المعنية بالتحويل لها.

تحويلات

ملاحظة

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

تحويلات محلية

يتم تطبيق تحويل محلي إلى عنصر معين إلى رسم. ل مثال، GraphicsPathيحتوي الكائن Transformالطريقة التي تسمح لك بتحويل نقاط بيانات من تلك مسار. المثال التالي برسم مستطيل لا التحويل ومسار مع تحويل استدارة. (افترض أنه هناك لا يوجد تحويل العالم).

        Dim myMatrix As New Matrix()
        myMatrix.Rotate(45)
        myGraphicsPath.Transform(myMatrix)
        myGraphics.DrawRectangle(myPen, 10, 10, 100, 50)
        myGraphics.DrawPath(myPen, myGraphicsPath)

Matrix myMatrix = new Matrix();
myMatrix.Rotate(45);
myGraphicsPath.Transform(myMatrix);
myGraphics.DrawRectangle(myPen, 10, 10, 100, 50);
myGraphics.DrawPath(myPen, myGraphicsPath);

يمكنك دمج تحويل العالم بتحويلات المحلي إلى تحقيق العديد من نتائج. تشغيل سبيل المثال، يمكنك استخدام التحويل العالم إلى مراجعة إحداثيات الالنظام واستخدام تحويلات محلية لتدوير وتغيير حجم الالكائنات المرسومة تشغيل الجديدة إحداثيات الالنظام.

افترض أنك تريد إحداثيات النظام له به بكسل 200 نقطة بداية من الحافة اليسرى من منطقة العميل و 150 بكسل من أعلى منطقة المحتويات الفعلية. علاوة على ذلك، افترض أنك تريد وحدة القياس أن البكسل، بس-محور الإشارة إلى اليمين و y-محور الإشارة. النظام إحداثيات افتراضي على المحور ص الإشارة باستمرار، لذا تحتاج إلى تنفيذ انعكاس عبر المحور الأفقي. يبين المثال التالي مصفوفة أو انعكاس.

تحويلات

بعد ذلك، افترض أن تحتاج إلى القيام وحدات ترجمة 200 يمين و 150 الوحدات باستمرار.

ينشئ المثال التالي إحداثيات الالنظام فقط بوصفها بواسطة إعداد تحويل العالم من Graphicsالكائن.

        Dim myMatrix As New Matrix(1, 0, 0, -1, 0, 0)
        myGraphics.Transform = myMatrix
        myGraphics.TranslateTransform(200, 150, MatrixOrder.Append)

Matrix myMatrix = new Matrix(1, 0, 0, -1, 0, 0);
myGraphics.Transform = myMatrix;
myGraphics.TranslateTransform(200, 150, MatrixOrder.Append);

التعليمة البرمجية التالية (وضع في إنهاء يسبق مثال) يقوم بإنشاء مسار يتكون من مستطيل مفرد ذي الزاوية اليسرى السفلية الخاصة به في أصل النظام إحداثيات جديدة. المستطيل هو تعبئة مرة واحدة لا التحويل المحلي ومرة واحدة تحويل محلي. يتكون التحويل المحلي للمقياس الأفقي بواسطة متبوعة بعامل 2 بواسطة استدارة 30 درجة.

        ' Create the path.
        Dim myGraphicsPath As New GraphicsPath()
        Dim myRectangle As New Rectangle(0, 0, 60, 60)
        myGraphicsPath.AddRectangle(myRectangle)

        ' Fill the path on the new coordinate system.
        ' No local transformation
        myGraphics.FillPath(mySolidBrush1, myGraphicsPath)

        ' Set the local transformation of the GraphicsPath object.
        Dim myPathMatrix As New Matrix()
        myPathMatrix.Scale(2, 1)
        myPathMatrix.Rotate(30, MatrixOrder.Append)
        myGraphicsPath.Transform(myPathMatrix)

        ' Fill the transformed path on the new coordinate system.
        myGraphics.FillPath(mySolidBrush2, myGraphicsPath)

// Create the path.
GraphicsPath myGraphicsPath = new GraphicsPath();
Rectangle myRectangle = new Rectangle(0, 0, 60, 60);
myGraphicsPath.AddRectangle(myRectangle);

// Fill the path on the new coordinate system.
// No local transformation
myGraphics.FillPath(mySolidBrush1, myGraphicsPath);

// Set the local transformation of the GraphicsPath object.
Matrix myPathMatrix = new Matrix();
myPathMatrix.Scale(2, 1);
myPathMatrix.Rotate(30, MatrixOrder.Append);
myGraphicsPath.Transform(myPathMatrix);

// Fill the transformed path on the new coordinate system.
myGraphics.FillPath(mySolidBrush2, myGraphicsPath);

يبين المثال التالي الجديد إحداثيات المستطيلات جهازي والالنظام.

تحويلات

راجع أيضًا:

موارد أخرى

تحويلات وأنظمة إحداثيات

استخدام تحويلات في مدارة GDI + Detection Tool