Честно говоря, я должен сказать, что я не «ответил на свой вопрос» и не решил эту проблему самостоятельно, но смог получить помощь извне как от Мэтта Уорда, так и от Майкла Фурда. Я искренне благодарю Мэтта и Майкла за их время, помощь и терпение, и я очень благодарен им за то, что они написали свои исправления.
Основной проблемой, которая помешала запуску сценария MainForm.py, было упущение с моей стороны импорта класса Color из пространства имен System.Drawing и перечислений SmoothingMode и LineJoin из пространства имен System.Drawing.Drawing2D. Хотя мой сценарий напрямую не создает экземпляры каких-либо дополнительных перечислений или классов, они все равно должны загружаться и ссылаться на их соответствующие сборки .NET DLR, чтобы сделать их доступными и применимыми в моем сценарии. (Примечание: еще раз, спасибо Мэтту за то, что он указал мне на это; если в объяснении есть какие-либо ошибки, они мои, а не Мэтта.)
Исходное создание экземпляров Array экземпляров GDI + Point было правильным, но более сжатый подход показан в исправленном сценарии ниже. (Примечание: еще раз, моя благодарность Майклу за то, что он указал на альтернативу создания экземпляра Array.)
Исправленный и работающий скрипт MainForm.py выглядит следующим образом:
import System.Drawing
import System.Drawing.Drawing2D
import System.Windows.Forms
from System import Array
from System.Drawing import Pen, Point, Color
from System.Drawing.Drawing2D import GraphicsPath, CustomLineCap, SmoothingMode, LineJoin
from System.Windows.Forms import *
class MainForm(Form):
def __init__(self):
self.InitializeComponent()
def InitializeComponent(self):
self.SuspendLayout()
#
# MainForm
#
self.ClientSize = System.Drawing.Size(284, 264)
self.Name = "MainForm"
self.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
self.Text = "GDI+ CustomLineCaps"
self.Paint += self.MainFormPaint
self.ResumeLayout(False)
def MainFormPaint(self, sender, e):
graphics = e.Graphics
bluePen = Pen(Color.Blue, 1)
points = Array[Point] \
((Point(10, 10), Point(15, 10), Point(20, 15), \
Point(20, 20), Point(15, 25), Point(10, 25), \
Point(5, 20), Point(5, 15), Point(10, 10)))
graphicsPath = GraphicsPath()
graphicsPath.AddLines(points)
graphics.SmoothingMode = SmoothingMode.AntiAlias
lineCap = CustomLineCap(None, graphicsPath)
lineCap.BaseInset = 0
lineCap.WidthScale = 1
lineCap.StrokeJoin = LineJoin.Miter
bluePen.CustomStartCap = lineCap
bluePen.CustomEndCap = lineCap
graphics.DrawLine(bluePen, 50, 150, 200, 150)
graphics.DrawLine(bluePen, 150, 50, 150, 200)
lineCap.Dispose()
graphicsPath.Dispose()
bluePen.Dispose()