Blender 3D to 2d DXF

Small Python script witch can make 2d from selected 3D objects in Blender. Useful for furniture. For 2D I use qCad (free version).

import bpy, os

# get the current selection
selection = bpy.context.selected_objects

# initialize a blank result variable
element_width = "-x"
element_height = "z"

list_dims = []

# Put Origin to middle
#bpy.ops.object.origin_set( type = 'ORIGIN_GEOMETRY' )
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_VOLUME', center='MEDIAN')


# iterate through the selected objects
for sel in selection:
    # get the current object's dimensions
    dims = sel.dimensions
    
    # fix dimensions
    a = dims.x*1000
    b = dims.y*1000
    c = dims.z*1000
    
    # fix locations
    lcx = sel.location.x*1000
    lcy = sel.location.y*1000
    lcz = sel.location.z*1000
    
    w = 0
    h = 0
    
    lx = 0
    ly = 0

    x_and_width = {
    	# w, lx
    	"x": [round(a, 1), round(lcx - a/2, 3)],
    	"y": [round(b, 1), round(lcy - b/2, 3)],
    	"z": [round(c, 1), round(lcz - c/2, 3)],
    	"-x": [round(a, 1), round(-(lcx) - a/2, 3)],
    	"-y": [round(b, 1), round(-(lcy) - b/2, 3)],
    	"-z": [round(c, 1), round(-(lcz) - c/2, 3)]
    }

    y_and_height = {
    	"x": [round(a, 1), round(lcx - a/2, 3)],
    	"y": [round(b, 1), round(lcy - b/2, 3)],
    	"z": [round(c, 1), round(lcz - c/2, 3)],
    	"-x": [round(a, 1), round(-(lcx) - a/2, 3)],
    	"-y": [round(b, 1), round(-(lcy) - b/2, 3)],
    	"-z": [round(c, 1), round(-(lcz) - c/2, 3)]
    }

    celX = x_and_width[element_width]
    celY = y_and_height[element_height]

    list_dims.append( [ celX[0], celY[0], celX[1], celY[1] ] )


print("");
prnt_rect_funct = """
function rect(x, z, m){
    var doc = getDocument();
    var pList = [new RVector(0,0), new RVector(x,0), new RVector(x,z), new RVector(0,z)];
    var poly = new RPolyline(pList, true);
    var polyData = new RPolylineData(poly);
    var n = new RPolylineEntity(doc, polyData);
    addEntity(n);
    move(n, m);
}
"""
print(prnt_rect_funct)

for x in list_dims:
    print("rect(", x[0], ", ", x[1], ",", "[", x[2], ", ", x[3], "])")

Share and Enjoy !

Shares

Проектиране на мебели в Blender 3D – ръководство и видео урок

RENDERED етажерка
Ще се опитам да напиша един урок за просто проектиране, моделиране и програмиране на мебели в Blender. Програмата поддържа езика за програмиране Python, който разполага с безкрайни възможност за създаване и управление на обекти. Ще се постарая да се изразявам максимално простичко и ясно.

Необходими инструменти:
1. Молив
2. Лист хартия
3. Blender 3D – по възможност версия 2.67 или по-нова

Първо да скицираме някакъв по-простичък обект (мебел), който искаме да проектираме. Аз ще създам проста етажерка за окачване на стена. За да улесня максимално процеса, моята етажерка ще е от 4 детайла – 2 еднакви по размер страници + 2 една по размер елемента, които ще са гръб и под. Ето как изглежда моята етажерка:
Схема на етажерка
Сега е време да се сблъскаме с назъбения интерфейс на моделера Blender. Програмата е малко плашеща за нови потребители. Но има голямо комюнити и много уроци, които помагат за овладяването и. Лично аз много харесвам тази програма и използвам предимно базовите и фукнции, които често ми олесняват живота. Нека да започнем със забавата.
Стартираме програмата и натискаме Delete бутона от клавиатурата, за да изтрием куба, който се зарежда под дефолт.
Blender 3D interface
Старайте се да не кликате никъде с мишката, докато не разберете каква е логиката на програмата. Кликовете с мишока са:
– Левия клик поставя 3Д-курсора в точката на кликане
– десния клик върху обект го селектира
– Скролирането в 3D фрейма зумва
– Натиснат среден бутон върти 3Д-фрейма
– среден бутон + задържан Shift мести 3Д-фрейма

Има и доста допълнителни команди, но за тях по-късно.

Сега, докато не сме почнали с експериментите, нека разгледаме координатната система. Намира се долу в ляво:
Blender координатна система
Сега да помислим как да си разположим елементите от нашата етажерка:
Проектиране на етажерка
Важно е да се отбележи, че ще използваме метричната система. Това трябва да му го кажем на 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
Blender scripting
Кликнете на бутона +New
Blender new script
!!! Супер важно: Старайте се курсора на мишката винаги да е във фрейма в който работите. Примерно, ако искате да въвеждате текст в текстовия редактор, курсора ви трябва да е в този прозорец (фрейм).
В текстовия редактор пейстнете следния код:

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 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

Прозореца със скрипта трябва да изглежда така:
Blender Python script
Командите:

1
2
bpy.ops.mesh.primitive_cube_add
bpy.context.object.dimensions

са въведени в API-интерфейса на Blender. Всяка версия на програмата има документация в която са описани всички команди, които могат да се изпълняват от програмата. Как лесно да разберем коя команда как се ползва ще опиша някой друг път.

Сега трябва да изпълним кода. Натискаме Text->Run Script:
Blender run script
От тук насетне следва местене и рендване в Blender. Действията, които съм извършил в програмата, могат да се видят в по-долното видео:
[flv:https://blog.nediko.info/examples/blender/Etajerka_tutorial.flv https://blog.nediko.info/examples/blender/Etajerka_tutorial.jpg 584 316]

Share and Enjoy !

Shares