private void brush_timer_elapsed(object sender, ElapsedEventArgs e) { float height = 0.1f; fAccumTime += fBrushTime; float r0 = 0.1f + fAccumTime * 0.02f; float r1 = 0.1f + (fAccumTime + fBrushTime) * 0.02f; float t0 = fAccumTime * 2.0f; float t1 = (fAccumTime + fBrushTime) * 2.0f; float x0 = r0 * (float)Math.Cos(t0); float y0 = r0 * (float)Math.Sin(t0); float x1 = r1 * (float)Math.Cos(t1); float y1 = r1 * (float)Math.Sin(t1); StoredCommands sc = new StoredCommands(); vec3f v0 = new vec3f(); v0.x = x0; v0.y = height; v0.z = y0; vec3f v1 = new vec3f(); v1.x = x1; v1.y = height; v1.z = y1; sc.AppendActionCommand_LinearBrushStroke3D(v0, v1, 16); mmRemote.ExecuteCommands(sc); }