package sunshine.ikurs.kz.myapplication;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
//Объявляем массив кнопок
Button[] B;
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu15, menu);
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Создаем массив кнопок.
B = new Button[16];
//Записываем кнопки в массив.
B[0] = (Button) findViewById(R.id.button1);
B[1] = (Button) findViewById(R.id.button2);
B[2] = (Button) findViewById(R.id.button3);
B[3] = (Button) findViewById(R.id.button4);
B[4] = (Button) findViewById(R.id.button5);
B[5] = (Button) findViewById(R.id.button6);
B[6] = (Button) findViewById(R.id.button7);
B[7] = (Button) findViewById(R.id.button8);
B[8] = (Button) findViewById(R.id.button9);
B[9] = (Button) findViewById(R.id.button10);
B[10] = (Button) findViewById(R.id.button11);
B[11] = (Button) findViewById(R.id.button12);
B[12] = (Button) findViewById(R.id.button13);
B[13] = (Button) findViewById(R.id.button14);
B[14] = (Button) findViewById(R.id.button15);
B[15] = (Button) findViewById(R.id.button16);
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
private void showMsg(String msg) {
Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG);
toast.show();
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getTitle().toString()) {
case "Новая игра":
showMsg("Новая игра");
Random rand = new Random();
int n;
for (int i=0;i<500;i++) {
n = rand.nextInt(16);
buttonOnClick(B[n]);
}
break;
case "Выход":
finish();
System.exit(0);
break;
}
return super.onOptionsItemSelected(item);
}
//Функция смены кнопок Swap(B[2],B[3]);
public void Swap(Button B1, Button B2) {
if (B2.getVisibility() == View.INVISIBLE) {
B2.setVisibility(View.VISIBLE);
B1.setVisibility(View.INVISIBLE);
String Tmp = B1.getText().toString();
B1.setText(B2.getText());
B2.setText(Tmp);
}
}
public void buttonOnClick(View V) {
//Получаем текущую кнопку по которой кликнули
Button current = (Button) V;
//Получаем номер кнопки из тега кторый задали в XML файле в текстовом режиме редактирования
String N = current.getTag().toString();
//преобразуем тег из строки в целое число
int n = Integer.parseInt(N) - 1;
//рассчитываем номер строки путем целочисленного деления
int y = n / 4;
//вычисляем столбец
int x = n;
if (n >= 12) x = n - 12;
else if (n >= 8) x = n - 8;
else if (n >= 4) x = n - 4;
//Рассчитываем номер кнопки сверху снизу слева справа и записываем в переменные
//NT NL NR NB NC (Top Left Right Bottom Current)
int nc = y * 4 + x;
int nt = (y - 1) * 4 + x;
int nb = (y + 1) * 4 + x;
int nl = y * 4 + x - 1;
int nr = y * 4 + x + 1;
//Проверяем существование кнопки слева справа снизу сверху
//Если существует то пытаемся поменять кнопки местами
if (y - 1 >= 0)
Swap(B[nc], B[nt]);
if (y + 1 < 4)
Swap(B[nc], B[nb]);
if (x - 1 >= 0)
Swap(B[nc], B[nl]);
if (x + 1 < 4)
Swap(B[nc], B[nr]);
int cnt=0;
for (int i=0;i<16;i++) {
if (B[i].getText().equals(Integer.toString(i+1))) cnt++;
}
if (cnt == 16) showMsg("Вы выиграли");
}
}
package sunshine.ikurs.kz.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
//Объявляем массив кнопок
Button [] B;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Создаем массив кнопок.
B=new Button[16];
//Записываем кнопки в массив.
B[0]=(Button)findViewById(R.id.button1);
B[1]=(Button)findViewById(R.id.button2);
B[2]=(Button)findViewById(R.id.button3);
B[3]=(Button)findViewById(R.id.button4);
B[4]=(Button)findViewById(R.id.button5);
B[5]=(Button)findViewById(R.id.button6);
B[6]=(Button)findViewById(R.id.button7);
B[7]=(Button)findViewById(R.id.button8);
B[8]=(Button)findViewById(R.id.button9);
B[9]=(Button)findViewById(R.id.button10);
B[10]=(Button)findViewById(R.id.button11);
B[11]=(Button)findViewById(R.id.button12);
B[12]=(Button)findViewById(R.id.button13);
B[13]=(Button)findViewById(R.id.button14);
B[14]=(Button)findViewById(R.id.button15);
B[15]=(Button)findViewById(R.id.button16);
}
//Функция смены кнопок Swap(B[2],B[3]);
public void Swap(Button B1, Button B2)
{
if (B2.getVisibility() == View.INVISIBLE)
{
B2.setVisibility(View.VISIBLE);
B1.setVisibility(View.INVISIBLE);
String Tmp = B1.getText().toString();
B1.setText(B2.getText());
B2.setText(Tmp);
}
}
public void buttonOnClick(View V) {
//Получаем текущую кнопку по которой кликнули
Button current = (Button)V;
//Получаем номер кнопки из тега кторый задали в XML файле в текстовом режиме редактирования
String N=current.getTag().toString();
//преобразуем тег из строки в целое число
int n = Integer.parseInt(N)-1;
//рассчитываем номер строки путем целочисленного деления
int y = n / 4;
//вычисляем столбец
int x = n;
if (n >= 12) x = n - 12;
else
if (n >= 8) x = n - 8;
else
if (n >= 4) x = n - 4;
//Рассчитываем номер кнопки сверху снизу слева справа и записываем в переменные
//NT NL NR NB NC (Top Left Right Bottom Current)
int nc = y * 4 + x;
int nt = (y - 1) * 4 + x;
int nb = (y + 1) * 4 + x;
int nl= y * 4 + x-1;
int nr = y * 4 + x + 1;
//Проверяем существование кнопки слева справа снизу сверху
//Если существует то пытаемся поменять кнопки местами
if (y - 1 >= 0)
Swap(B[nc], B[nt]);
if (y + 1 < 4)
Swap(B[nc], B[nb]);
if (x - 1 >= 0)
Swap(B[nc], B[nl]);
if (x + 1 < 4)
Swap(B[nc], B[nr]);
}
}
Создаем первое приложение SunShine — прогноз погоды для Android.
Приложение sunshie
Основными целями нашего курса являются:
Получение базовых знаний по Android Studio.
Изучение Android API
Освоение основных концепций построения мобильных приложений и программирование приложений в условиях ограниченных вычислительных и энергоресурсов.
Получение знаний по разработке графического интерфейса для устройств с различной плотностью пикселей и различным разрешением экрана.
Запускаем Android Studio
Запускаем Andriod Studio
Выбираем в меню Start a new android studio project.
2. Задаем имя приложения и домен.
Наше первое приложение будет называться SunShine
Создаем приложение в AndroidStudio
3. Выбираем SDK
Давайте для начала разберемся что такое SDK?
SDK (от англ. software development kit) — комплект средств разработки, который позволяет специалистам по программному обеспечению создавать приложения для определённого пакета программ, программного обеспечения базовых средств разработки, аппаратной платформы, компьютерной системы, игровых консолей, операционных систем
Немножко о терминологии которую мы будем применять.
Min SDK — Минимальная поддерживаемая версия SDK для нашего приложения.
Target SDK — SDK платформы на которой мы тестируем наше приложение.
Android не рекомендует использовать MinSDK ниже 2.3 так как большинство устройств поддерживающих более ранние версии уже не поддерживаются или были обновлены.
График показывающий количество устройств для каждой версии Android SDK.
На сегодняшний день Android минимальная версия SDK поддерживаемая Google это Gingerbread.
Выбирая ее в качестве Min SDK ваше приложение будет поддерживать 100% устройств.
В начале каждой версии написана версия API
API (Application Programming Interface) — это интерфейс программирования, интерфейс создания приложений. Если говорить более понятным языком, то API — это готовый код для упрощения жизни программисту.
API 10 который поддерживает Android 2.3.3 (Gingerbrad) поддерживает большинство элементов UI и PlayMarket.
Как выбрать Android SDK
Выбираем тип приложения по типу взаимодействия с пользователем (Activity type)
Для первого приложения мы выберем Empty Activity
Empty Activity
Далее в окошке Customize activity мы ничего менять не будем для того чтобы все элементы проекта у всех были стандартными.
Немножко подождем пока создается проект и скачаем необходимые файлы со спрайтами необходимыми для создания проекта.
Справка. Что такое спрайты?
Изначально под спрайтами понимали небольшие рисунки, которые выводились на экран с применением аппаратного ускорения. На некоторых машинах (MSX 1, NES) программная прорисовка приводила к определённым ограничениям, а аппаратные спрайты этого ограничения не имели. Впоследствии с увеличением мощности центрального процессора, от аппаратных спрайтов отказались, и понятие «спрайт» распространилось на всех двумерных персонажей. В частности, в видеоиграх Super Mario и Heroes of Might and Magic вся графика спрайтовая.
К аппаратно ускоренным спрайтам вернулись в середине 1990-х годов — когда развитие мультимедиа и взрывное повышение разрешения и глубины цвета потребовало специализированный процессор в видеоплате. Именно тогда, как обёртка над аппаратным 2D-ускорителем, вышел DirectDraw. DirectX 8 ввёл общий API для двух- и трёхмерной графики, и в современных спрайтовых играх двухмерные спрайты выводятся точно так же, как и трёхмерные — как текстурированный прямоугольник.
CSS-спрайты.
Применяются в вебе. Несколько изображений располагаются в одном графическом файле. Для того, чтобы вырезать из файла нужный кусок, применяется CSS — отсюда название технологии.
CSS-спрайты экономят трафик и ускоряют загрузку — браузеру потребуется запрашивать меньше файлов
Теперь, когда проект загружен давайте загрузим иконку для нашего проекта.
Для начала ознакомимся с представлениями файлов проекта.
В левом верхнем углу под основным меню из выпадающего списка мы можем выбирать различные виды представления файловой структуры проекта. Данная функция разработана для комфортного перехода разработчиков из различных сред программирования. Типовой структурой для большинства программистов Java является представление файлов по типу Project. Давайте выберем его. Так как в будущем вам будет проще осваивать различные среды программирования, такие как Visual Studio Intell IJ IDEA и NetBeans.
Обратите внимание на нижнюю консоль. В ней отображается процессы выполняемые Gradle. Подождите окончания работы Gradle.
В среде разработки приложений Android есть система которая называется Gradle
Справка: Gradle
Gradle — система автоматической сборки, построенная на принципах Apache Ant и Apache Maven. В Eclipse использовалась система Ant, но большинство разработчиков даже не замечало её работы. В основном возможности системы использовались в конторах для автоматизации различных задач. В Android Studio такой номер не пройдёт. Gradle сопровождает вас во время разработки постоянно. Поначалу, если вы перешли с Eclipse, Gradle сильно раздражает своими действиями. Но позже вы оцените её удобство и может даже полюбите её. Коротко говоря эта служба будет в фоновом режиме постоянно что то делать и вам будет нужно научиться работать с ней и понимать что если у вас выходят ошибки то скорее всего вам нужно дождаться окончания работы Gradle.
Добавляем иконку для нашего Android приложения.
В Project View откройте вкладку app и найдите там src. Src — сокращение от sources, что означает источники.
Щелкните правой кнопкой по иконе SRC и в выпадающем меню выберите New->Image Asset
Давайте загрузим иконку sunshine для нашего приложения и загрузим ее в ресурсы нашего проекта.
Ура наш проект создан!!!
Установка нашего приложения для Android на телефон.
Давайте установим наше приложение на наш телефон.
Для этого нам потребуется установить USB драйвера через SDK manager.
Откроем SDK manager и установим usb драйвер.
Ну вот мы готовы к установке нашего приложения.
Теперь нужно на телефоне включить режим разработчика и подключить его через USB.
Для включения режима разработчика вам необходимо открыть настройки войти во вкладку об устройстве и проскролив в самый низ 8мь раз нажать на пункт списка «номер сборки». После этого появится сообщение что вы активировали режим разработчика.
Далее вернуться в настройки и открыть появившееся меню разработчика. Разрешить отладку по USB. И теперь все готово к установке приложения на наш телефон. Подключите телефон и добавьте ваш компьютер в доверенные устройства по установки приложений.
После чего нажмите зеленую стрелку и у вас откроется окно в котором вы увидите в списке устройств ваш телефон.
Обратите внимание на то что Shift + F10 запускает ваше приложение.
Попробуйте запустить приложение используя эту комбинацию клавиш.
Теперь ваш телефон должен появиться в списке подключенных устройств.
Проверьте статус и совместимость версии SDK что версия вашего телефона выше чем MIN SDK.
Нажмите Ок и готово. Приложение должно успешно установиться на ваш телефон.
Эмулятор Android для Android studio.
На практике гораздо удобнее использовать виртуальные устройства для тестирования программ.
Одним из таких эмуляторов является genymotion. Скачайте его и запустите после установки.
После запуска вы увидите такой прекрасный телефон.
Давайте установим наше приложение на виртуальное устройство.
Надеюсь у вас все получилось.
Создаем список с элементами в Android Studio для отображения прогноза погоды.
Давайте рассмотрим три типа Layout — Расположения элементов в нашем приложении.
В зависимости от разрешения экрана нам необходимо будет использовать различные варианты размещения и масштабирования элементов. Существуют три типовых схемы размещения элементов на экране.
Frame Layout осуществляет размещение одного элемента на одном экране. Просмотр контента осуществляется фреймами.
Linear layout. При таком размещении элементы размещаются друг за другом по горизонтали или по вертикали (horisontal/vertical).
Relative Layout. Относительное размещение элементов позволяет размещать элементы относительно друг друга или относительно центра левого или правого края экрана с различными отступами.
Для отображения элементов списка мы создадим новый xml layout.
list_item_forecast.xml
Для этого вам нужно в окне проекта открыть путь как указано на картинке и щелкнуть правой кнопкой по layout и выбрать из появившегося меню первый пункт — create new layout. В появившемся диалоге задайте имя list_item_forecast.xml
После чего откройте это файл в графическом редакторе и добавьте LinearLayout и в него поместите textView
Все шаги описаны на картинке. Для textView задайте значения для свойства gravity по выравниванию как показано на картинке ниже. Дополнительно задайте размер шрифта 26sp.
Давайте немножко отвлечемся и разберемся как работает прокрутка в списках на Android.
В отличии от стандартного списка в приложениях Windows где мы не столь ограничены в ресурсах, в приложениях Android мы не можем загрузить все элементы сразу и прокручивать их. В Android мы будем повторно использовать элементы которые скрыты от нас. В итоге нам потребуется всего на дав элемента списка больше чем в видимой части для того чтобы прокручивать список. Как только верхний элемент становится полностью невидимым он тут же перескакивает в низ и в нем меняется текст на текст следующего элемента. И таким образом для реализации прокручивающегося списка требуется намного меньше памяти чем в приложениях Window.
Более детально механизм повторного использования элементов списка показан на следующем слайде.
Создание списка элементов в Android Studio
Ну теперь переходим к реализации списка. Давайте создадим новый layout который назовем fragment_main.xml
В редакторе кода из списка элементов в Разделе контейнеры найдите listView и перетащите его на в визуальный редактор.
Измените ID выбранного списка на listViewForecast.
Щелкаем правой кнопкой по папке layout
Создаем новый фрагмент.
Находим ListView
Перетаскиваем его в графический редактор.
Выбираем его из списка.
Задаем ему ID.
Теперь давайте измени тип размещения на FragmentLayout в текстовом редакторе так как данное представление является фрагментом а не целым элементом приложения.
Адаптеры и списки в Android Studio.
Для того чтобы загружать элементы списка нам необходимо задать адаптер для списка и указать в каком массиве хранятся данные.
Сегодня мы продолжим изучение инструмента Loft, рассмотрим некоторые особенности применения этого инструмента, а также повторим и рассмотрим подробнее то, что было рассказано на прошлом уроке. Еще познакомимся с таким инструментами как Boolean и FDD 2x2x2. Ну и изучать все это будем на примере создания обычной столовой вилки.
Для начала создадим основу вилки в виде вот такого сплайна (вид слева):
Общая длина вилки должна быть около 20
На прошлом уроке мы использовали для создания Loft-объекта одно сечение, но на этом уроке мы создадим объект, используя два сечения. Первое сечение для ручки вилки выглядит вот так (вид спереди):
Еще раз напомню обязательно замыкайте сплайн. Размеры этого сечения примерно 0.3 по высоте и 1.1 по ширине. Обратите внимание что этот объект симметричен и можно создать сначала одну половинку, и отразив ее получить вторую половинку. Потом необходимо их «склеить» (все это было рассмотрено на прошлом уроке, на примере создания ручки).
Сейчас надо создать второе сечение для зубьев вилки, для этого скопируйте первое сечение и устраните изгиб:
Теперь необходимо выделить первый направляющий сплайн, и зайти во вкладку Create, выбирать Geometry, в выпадающем списке Compound Objects, нажимаем на кнопке Loft:
Далее нажимаем на кнопке Get Shape:
И кликните по первому сечению, в результате у меня получилось вот так:
Получилось не совсем то что мы ожидали увидеть. Чтобы это исправить заходим во вкладку Modify, далее в подобъекты Loft-объекта и выбираем Shape:
С помощью инструмента Select and Rotate выделите сечение (на предыдущем рисунке зеленого цвета) и поверните на 90 градусов, так чтобы объект стал похож на вилку:
Теперь необходимо добавить второе сечение, для этого перейдите обратно в списке подобъектов на редактирование всего Loft-объекта:
И раскройте свиток Path Parameters:
Поставьте галочку рядом с «On» и плавно изменяя параметр Path, добейтесь того чтобы желтый крестик был примерно как на рисунке:
После этого опять нажмите кнопку Get Shape и щелкните на первом сечении. Потом еще не много передвиньте желтый крестик:
Нажмите Get Shape и щелкните на втором сечении, в результате должно получится вот так:
Как видите получился объект с двумя сечениями с плавным переходом между ними. Если в результате добавления новых сечений у вас возникли трудности с неправильным их расположением, исправьте это путем редактирования подобъектов (так же как и с первым сечением)
Теперь перейдите в свиток Deformations
Здесь есть пять инструментов для деформации объектов методом лофтинга:
Scale – масштаб, самый часто применимый инструмент. Позволяет масштабировать объект по различным осям в различных его частях.
Twist – скрутка
Teeter – качка
Bevel – скос
Fit – подгонка
Мы использовать будем масштаб, нажмите кнопку Scale, появится вот такое окно:
Здесь изображен график масштаба объекта по все его длине. По оси X изменяется месторасположение точки в процентах от 0 до 100. По оси Y откладывается масштаб конкретной точки на графике. По умолчанию масштаб каждой точки объекта 100% что соответствует прямой горизонтальной линии на уровне 100%. Так же на графике изображены вертикальные пунктирные лини они изображают месторасположение вершин направляющего сплайна.
На верху расположено меню с помощью которого можно изменять график. Рассмотрим некоторые из его инструментов.
Make Symmetrical – изменяет масштаб одновременно и по оси X и по оси Y
Display X Axis – отображает график изменения масштаба по оси X
Display Y Axis – отображает график изменения масштаба по оси Y
Display XY Axis – отображает график изменения масштаба по обоим осям X и Y
Move Control Point – двигает контрольные точки на графике
Insert Corner Point – добавляет новую контрольную точку на график
Delete Control Point – удаляет контрольную точку
Внизу расположено меню, которое позволяет рассмотреть поближе какой-нибудь кусок графика. Рассматривать инструменты этого меню не будем, надеюсь они и так понятны.
Перед тем как продолжить перейдите на уровень подобъектов и убедитесь, что направляющая Path находится строго по центру объекта, если это не так то, перейдите на уровень Shape и передвиньте все сечения так чтобы направляющая стала ровно по центру объекта. Иначе изменение масштаба объекта будет происходить не совсем корректно.
Перед тем как что то изменять отключите симметричное изменение графиков по осям X и Y, нажав на кнопку Make Symmetrical. Теперь добавьте несколько вершин и измените график следующим образом:
Во время создания точек изменяйте их тип так чтобы график плавно проходил через эти точки:
В результате наш объект стал больше похож на вилку:
Теперь осталось нарезать зубья вилки. Именно этим мы сейчас и займемся. Перейдите на вкладку Create далее Geometry в выпадающем списке Extended Primitives и выберите объект ChamferBox
И создайте бокс там где должно быть пустое место:
Потом скопируйте этот объект 2 раза, при копировании ставьте в появляющемся окне позицию Instance, это позволит изменяя исходный объект изменять аналогично и его копию:
разместите полученные копии так чтобы получились одинаковые зубцы:
Теперь выделите один из боксов и перейдите на вкладку Modify и в выпадающем списке Modifier List найдите модификатор FFD 2x2x2, он находится в разделе Object-Space Modifier. Этот модификатор добавляет вот такой бокс на объект с контрольными вершинами:
В списке модификаторов рядом с FDD 2x2x2 находятся еще FDD 3x3x3 и FDD 4x4x4 по своему воздействию на объект они очень похожи и отличаются только количеством управляющих вершин, для наших же целей подойдет модификатор с самым малым количеством вершин, а именно FDD 2x2x2.
Передвигая эти вершины можно соответствующе модифицировать объект. Теперь выделите 4 вершины на одной стороне бокса:
Чтобы выделить эти вершины
-Выбираем наш бокс(я выбрал первый созданный), выделились все остальные, т.к. они у нас взаимосвязаны.
-Справа находим наше меню с подобъектами, там можно выбрать пункт Control Points и уже затем выделить вершины:
И с помощью инструмента Select and Uniform Scale не много уменьшите этот конец бокса по оси X:
Аналогично можно не много увеличить другой конец бокса
Обратите внимание что копии бокса деформировались так же как и первоначальный бокс.
Теперь еще раз проверьте одинаковые ли получаются зубцы, если надо подвиньте не много боксы. После этого выделите вилку и перейдите на вкладку Create подвкладку Geometry в выпадающем списке Compound Objects, нажимаем на кнопке Boolean:
После этого нажмите кнопку Pick Operand B
И щелкните на одном из боксов. В результате должен появиться вот такой зубец
Повторите те же операции с другими боксами в результате у вилки появились зубцы:
Как вы могли заметить инструмент Boolean позволяет делать булево вычитание одного объекта из другого, в результате как бы делать «дырки» в объекте.
На этом уроке мы продолжим изучение сплайнов. Начнем знакомство с модификатором Loft. Далее освоим работу с двумя модификаторами Extrude и Bevel, они все не много похожи, но имеют некоторые различия, какие разберем в этом уроке. А рассматривать действие всех этих модификаторов мы будем на примере создания стула.
Создайте новую сцену и начнем пожалуй с сиденья стула для этого перейдите во вкладку «Create», выберите объекты «Geometry», далее в выпадающем списке выберите «Extended Primitives» и нажав кнопку «ChamferBox»
Создайте бокс с размерами как на рисунке:
Мы создали бокс именно с закругленными ребрами, потому что в реальной жизни очень мало вещей имеют идеальные острые ребра.
В результате получили переднею рейку сиденья:
Теперь создайте такой же бокс с закругленными краями, но с параметрами:
И пристройте его к первому боксу вот таким образом:
Когда вы будите двигать какие либо объекты делайте это в видах сбоку или сверху но не в перспективе, так можно разместить объект с большей точностью. Так относительно наших реек на виде сверху они выглядят вот так:
Как видите, они не много пересекаются.
Теперь сопируйте боковую рейку и разместите ее аналогичного с другой стороны от передней рейки, а переднею рейку скопируйте на место задней рейки:
Если вы забыли, как копировать объекты, то это делается зажиманием клавиши «Shift» на клавиатуре и передвижением копируемого объекта (подробно это разбиралось на уроке №2).
Далее перейдем к созданию передних ножек стула. Для этого перейдите во вкладку «Create», выберите объекты «Shapes», нажмите кнопку «Line»
и создайте сплайн, который показан на рисунках.
Вид слева:
Вид спереди:
Общая высота ножки будет 58. Обратите внимание на верхнею часть ножки она немного изогнута одновременно вперед и наружу.
Теперь создайте второй сплайн под названием «Circle» (Окружность) с радиусом 1.5, а количество сегментов 24:
Теперь выделяем первый сплайн и идем во вкладку «Create» выбираем подкладку «Geometry» в выпадающем списке «Compound Objects», нажимаем кнопку «Loft»
Инструмент «Loft» позволяет создавать объекты используя заданное сечение и указанное направление. Так в роли сечения у нас будет выступать второй сплайн – окружность, а в роли направления первый сплайн. Итак убедитесь что выделен первый сплайн, нажмите кнопку «Get Shape»
И кликните на окружность. В результате получилась вот такая ножка:
Так как созданные сплайны были вспомогательными теперь их можно скрыть чтобы не мешались но лучше их не удалять т.к потом может выяснится что результат получился не таким как ожидалась и редактируя исходные сплайны можно изменить результирующий объект.
Скопируйте эту ножку и отразите ее по оси X с помощью инструмента «Mirror»:
В результате получились 2 ножки стула:
Теперь соберем все что у нас есть вместе, разместите рейки так чтобы изгиб ножек начинался сразу после них. При этом место стыка на виде сверху должно выглядеть так:
В результате должно получится нечто такое:
Теперь создадим таким же способом задние ножки стула, направляющие сплайны будут выглядеть примерно как на рисунках
Вид слева:
Вид спереди:
Общая высота сплайна должна быть 74. Используя уже созданное сечение при помощи инструмента «Loft» получаем вот такую ножку:
Аналогично копируем эту ножку, отражаем полученную копию и прикрепляем их к стулу:
Далее создайте два цилиндра радиусом 0.9 и разместите их между передними и задними ножками стула:
Теперь перейдем к созданию ручек стула, для этого перейдите на вид сверху и создайте сначала половину ручки:
Вид сверху:
Вид слева:
Вид спереди:
При этом наивысшая точка должна быть на высоте 85.
Далее перейдем на редактирование подобъектов «Spline»:
Выделите сплайн и создайте копию:
Отразите полученную копию с помощью инструмента «Mirror»:
Получится примерно так:
Далее переместите полученную копию так чтобы 2 точки на месте стыка слились в одну, выделите эти две точки и соедините их нажав на кнопку «Weld»:
Если две выделенные вершины находятся на расстоянии меньшем чем указано рядом с кнопкой «Weld», то эти вершины сливаются в одну. Этим способом можно склеить не только 2 вершины, а вообще любое количество вершин.
Создайте сплайн сечения – окружность радиусом 1.8, и с помощью инструмента «Loft» завершите создание ручки:
Теперь не много скруглим концы ручек, заодно не много уменьшив толщину ближе к концу. Для этого перейдем на вкладку «Modify» в раздел «Deformation» и нажмем на кнопку «Scale»:
В появившемся окне показан график, изменяя который можно менять толщину объекта.Для начала поставим точку в середину графика с помощью инструмента «Insert Corner Point»:
Вот так:
Добавьте еще несколько точек и измените график как на рисунке:
При этом высота верхних точек 120 нижних 95
Увеличьте масштаб с помощью инструментов в нижней правой части окна и расставьте контрольные вершины так чтобы скруглить концы ручек:
При этом чтобы добиться плавности графика меняйте тип вершин, так же как и у сплайна:
В результате мы получили не много скругленную ручку:
Измените аналогично другой конец графика, чтобы скруглить вторую ручку.
Далее создадим сиденье стула, для этого создайте «ChamferBox» со следующими параметрами:
Далее его следует не много сжать, для этого выделите этот бокс и кликнете правой кнопкой мыши по инструменту «Select and Uniform Scale» на главной панели инструментов:
В появившемся окне укажите, что надо ужать объект по оси Z на 40%:
Ну и разместите сиденье на свое место:
Перейдем к созданию спинки. Создайте сплайн такой формы, чтобы полностью закрыть отверстие в спинке стула, при этом советую начать с одной половинки с последующим копированием и отражением, т.е. как мы создавали ручки стула. При создании обязательно замкните сплайн.
Вид спереди:
Вид слева:
В списке модификаторов (Modifier List) найдите модификатор «Extrude» в разделе «Object-Space Modifiers».
Этот модификатор не много напоминает действие инструмента «Loft», он тоже берет сечение и как бы «выдавливает» его, превращая плоский сплайн в объемный объект. Только в отличии от Loft этому модификатору не требуется направляющая, выдавливание всегда происходит по прямой. Чтобы понять как это работает это введите в поле «Amount» значение 1, все остальные поля оставьте так как они были по умолчанию:
Как видите сплайн обрел объем:
Обратите внимание на то, что окно с составляющими сплайна дополнилось модификатором «Extrude»:
И выделяя различные строки в этом окне мы переходим на редактирование соответствующих частей. Таким образом, если после применения модификатора результат чем-то вам не понравился, то можно вернуться к редактированию вершин и изменить начальный сплайн. На последок расскажу про лампочку рядом с модификатором
по умолчанию она горит (белого цвета) это означает, что модификатор активен и влияет на результирующий объект, если на нее нажать то она потухнет (станет серого цвета) и данный модификатор перестанет влиять на результат.
Теперь скопируйте спинку, и удалите у копии модификатор «Extrude», для этого щелкните правой кнопкой мыши на модификатор и выберите Delete:
И добавьте модификатор «Bevel». По своему действию он очень напоминает Extrude, но имеет очень важную особенность. Этот модификатор позволяет делать фаску на концах объекта, эта нам пригодится при изготовлении подушки для спинки стула. Настройте параметры модификатора как на рисунке:
Не много расскажу про основные настройки этого модификатора. В секции «Surface» есть два значения «Linear Sides» и «Curved Sides». Если оставить выделенным первое то фаска будет с четко выраженными ребрами. Если оставить второе, то фаска будет более скругленной. «Segments» — чем больше это значение, тем больше секций между фасками и тем более плавной будут сами фаски. В свитке «Bevel Values» настройка самих фасок. Всего может быть 3 уровня фаски, чтобы добавить еще уровень надо поставить галку рядом с номер соответствующего уровня. У каждого уровня есть два параметра «Height» — отвечает за высоту выдавливания и «Outline» — чем больше это значение, тем больше угол фаски.
Разместите созданную подушку на спинке стула:
И на этом урок можно считать завершенным. На последок можно покрасить все части стула в соответствующие цвета, изменить отдельные части стула, если они кажутся не очень правильными. Иногда так бывает, что какие то мелкие ошибки замечаешь, когда объект уже собран.
На этом уроке мы познакомились с действием инструмента «Loft». Именно познакомились, в следующих уроках я думаю, мы разберем его более детально. Ну и освоили модификаторы «Bevel» и «Extrude».