Имам една идея за автоматична смяна на цветната схема на Bootstrap-базиран сайт. За целта ми трябва просто извличане на цветовете от картинка с php-скрипт.
За базови цветове създавам проста картинка с квадратчета, като тази:
За да извлека цветовете от отделните квадратчета използвам php-функцията imagecolorat, която взима цвета на пиксел при зададени кооординати. Координатната система е нулирана в горния ляв ъгъл:
Примерен скрипт в който използвам извличане цвета на пиксел, който се намира горе-долу по средата на всеки правоъгълник:
Ще се опитам да напиша един урок за просто проектиране, моделиране и програмиране на мебели в Blender. Програмата поддържа езика за програмиране Python, който разполага с безкрайни възможност за създаване и управление на обекти. Ще се постарая да се изразявам максимално простичко и ясно.
Необходими инструменти:
1. Молив
2. Лист хартия
3. Blender 3D – по възможност версия 2.67 или по-нова
Първо да скицираме някакъв по-простичък обект (мебел), който искаме да проектираме. Аз ще създам проста етажерка за окачване на стена. За да улесня максимално процеса, моята етажерка ще е от 4 детайла – 2 еднакви по размер страници + 2 една по размер елемента, които ще са гръб и под. Ето как изглежда моята етажерка:
Сега е време да се сблъскаме с назъбения интерфейс на моделера Blender. Програмата е малко плашеща за нови потребители. Но има голямо комюнити и много уроци, които помагат за овладяването и. Лично аз много харесвам тази програма и използвам предимно базовите и фукнции, които често ми олесняват живота. Нека да започнем със забавата.
Стартираме програмата и натискаме Delete бутона от клавиатурата, за да изтрием куба, който се зарежда под дефолт.
Старайте се да не кликате никъде с мишката, докато не разберете каква е логиката на програмата. Кликовете с мишока са:
– Левия клик поставя 3Д-курсора в точката на кликане
– десния клик върху обект го селектира
– Скролирането в 3D фрейма зумва
– Натиснат среден бутон върти 3Д-фрейма
– среден бутон + задържан Shift мести 3Д-фрейма
Има и доста допълнителни команди, но за тях по-късно.
Сега, докато не сме почнали с експериментите, нека разгледаме координатната система. Намира се долу в ляво:
Сега да помислим как да си разположим елементите от нашата етажерка:
Важно е да се отбележи, че ще използваме метричната система. Това трябва да му го кажем на Blender, иначе ще прави глупости. За целта правим следните настройки:
Елементите, които трябва да създадем в 3Д са:
– 2 броя страници: 18x240x222mm
– 2 броя плоскости за гръб и под: 850x222x18mm
Тези елементи по-късно ще ги добавим в нашия програмен код. Размерите на всеки елемент могат да се групират в масив. Примерно такъв:
stranici=[0.018, 0.240, 0.222]
gryb=[0.850, 0.222, 0.018]
dyno=[0.850, 0.018, 0.222]
Можем да ги създадем по поне 10 начина, но аз ще ви покажа един много нестандартен подход, който често се оказва най-оптимален и бърз вариант. Ще използвам много просто програмиране на Python. За целта трябва да отворим редактора за въвеждане на Python скриптове. Това също може да стане по много начини, но аз ще използвам предефинираните полета на Blender:
Кликнете бутона Choose Screen layout и изберете Scripting
Кликнете на бутона +New
!!! Супер важно: Старайте се курсора на мишката винаги да е във фрейма в който работите. Примерно, ако искате да въвеждате текст в текстовия редактор, курсора ви трябва да е в този прозорец (фрейм).
В текстовия редактор пейстнете следния код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import bpy
strani=[0.018,0.240,0.222]
gryb=[0.850,0.222,0.018]
dyno=[0.850,0.018,0.222]# създаваме 2-те страници. Те лежат в едно направление# и можем да използваме цикълfor x inrange(2): # изпълни 2 пъти
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=strani
# създаваме гръб
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=gryb
# създаваме пода
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=dyno
import bpy
strani=[0.018, 0.240, 0.222]
gryb=[0.850, 0.222, 0.018]
dyno=[0.850, 0.018, 0.222]
# създаваме 2-те страници. Те лежат в едно направление
# и можем да използваме цикъл
for x in range(2): # изпълни 2 пъти
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=strani
# създаваме гръб
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=gryb
# създаваме пода
bpy.ops.mesh.primitive_cube_add(radius=1)
bpy.context.object.dimensions=dyno
Прозореца със скрипта трябва да изглежда така:
Командите:
са въведени в API-интерфейса на Blender. Всяка версия на програмата има документация в която са описани всички команди, които могат да се изпълняват от програмата. Как лесно да разберем коя команда как се ползва ще опиша някой друг път.
Сега трябва да изпълним кода. Натискаме Text->Run Script:
От тук насетне следва местене и рендване в Blender. Действията, които съм извършил в програмата, могат да се видят в по-долното видео:
Преди доста време бях правил видео за редактора Vim. Направих го за мен, а и заради едни приятели от форум, който посещавах.
Скоро ми се наложи пак да ползвам Vim editor на едно Linux дистро и бях малко като пате в кълчища. За това качвам урока, та другият път да изкарам един бърз курс, ако ми се наложи.