cmds.polyColorPerVertex()
принимает кортеж rgb
в форме (r, g, b
), где каждый элемент должен иметь значение float
в диапазоне [0, 1]
.
«Оттенки серого» в данном контексте просто означает, что r == g == b
.
Соответственно, мы можем просто использовать генераторы случайных чисел Python для достижения этой цели:
brightness = np.random.rand() # generates a random float in the range [0, 1]
rgb = (brightness, brightness, brightness)
cmds.polyColorPerVertex(rgb=rgb)
Существует несколько вещей, которые можно попробовать:
Во-первых, попытайтесь установить свойство DoubleBuffer DataGridView к истинному. Это - свойство на фактическом экземпляре DataGridView, не Форма. Это - защищенное свойство, таким образом, необходимо будет разделить сетку на подклассы для установки его.
class CustomDataGridView: DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
Я видел, что много маленьких обновлений ничьей требует времени с DataGridView на некоторых видеокартах, и это может решить Вашу проблему путем пакетной обработки их, прежде чем они будут отосланы для дисплея.
Другой вещью, которую можно попробовать, является сообщение Win32 WM_SETREDRAW
// ... this would be defined in some reasonable location ...
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(HandleRef hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);
static void EnableRepaint(HandleRef handle, bool enable)
{
const int WM_SETREDRAW = 0x000B;
SendMessage(handle, WM_SETREDRAW, new IntPtr(enable ? 1 : 0), IntPtr.Zero);
}
В другом месте в Вашем коде Вы имели бы
HandleRef gh = new HandleRef(this.Grid, this.Grid.Handle);
EnableRepaint(gh, false);
try
{
this.doStuff();
this.doOtherStuff();
this.doSomeReallyCoolStuff();
}
finally
{
EnableRepaint(gh, true);
this.Grid.Invalidate(); // we need at least one repaint to happen...
}
Можно попытаться установить форму для использования DoubleBuffer. Установите Форму. Свойство DoubleBuffer к истинному, и это должно решить Вашу проблему.