Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Трехмерные преобразования в процедурном коде
Рассмотрим пример поворота объекта созданного в XAML вокруг оси y. Предварительно подготовим необходимые объекты в обработчике события Loaded.
private void Window_Loaded(object sender, RoutedEventArgs e) { myYRotate = new RotateTransform3D(); myYAxis = new AxisAngleRotation3D(); myYAxis.Axis = new Vector3D(0, 1, 0); myYAxis.Angle = 7; myYRotate.Rotation = myYAxis;
myTransform1 = new Transform3DGroup();
MyModel.Transform = myTransform1; }
myYRotate, myYAxis, myTransform1 описываются выше как поля класса MainWindow. Класс RotateTransform3D отвечает за преобразование поворота. С помощью класса AxisAngleRotation3D описывается ось, вокруг которой будет произведен поворот. Свойство Axis описывает направление оси через объект класса Vector3D. Свойство Angle задает угол поворота в градусах. Далее создается объект myTransform1 класса Transform3DGroup, который ставится в соответствие полю Transform класса нашей 3D-модели. Этот класс удобно использовать для группы последовательных 3D-преобразований. Фактически Transform3DGroup представляет собой коллекцию объектов типа Transform3D. Отметим, что на данном этапе описанное преобразование поворота и наша 3D-модель пока ни как не связаны. Далее создадим на форме кнопку для поворота. Обработчик события этой кнопки будет выглядеть следующим образом.
private void button1_Click(object sender, RoutedEventArgs e) { myTransform1.Children.Add(myYRotate); } Таким образом, при нажатии на кнопку в коллекцию преобразований с 3D-моделью будет добавляться очередной поворот. Вторым подходом, сокращающим количество элементов коллекции, является способ более раннего связывания 3D-модели с 3D-преобразованиями. Например:
private void Window_Loaded(object sender, RoutedEventArgs e) { myYRotate = new RotateTransform3D(); myYAxis = new AxisAngleRotation3D(); myYAxis.Axis = new Vector3D(0, 1, 0); myYAxis.Angle = 0; myYRotate.Rotation = myYAxis;
myXRotate = new RotateTransform3D(); myXAxis = new AxisAngleRotation3D(); myXAxis.Axis = new Vector3D(1, 0, 0); myXAxis.Angle = 0; myXRotate.Rotation = myXAxis;
myTransform1 = new Transform3DGroup();
MyModel.Transform = myTransform1;
myTransform1.Children.Add(myYRotate); myTransform1.Children.Add(myXRotate); }
При обработке события нажатия на кнопке, в этом случае, достаточно менять параметры созданных преобразований. Например, увеличивать угол поворота.
private void button1_Click(object sender, RoutedEventArgs e) { myYAxis.Angle += 7; myXAxis.Angle += 7; }
|