본문 바로가기
블렌더

블렌더2.83+파이썬=>3D 달력

첫 게시글 : itadventure.tistory.com/319

 

3D 블렌더 2.83 + 파이썬 스크립트와의 만남

3D 블렌더 프로그램에는 파이썬 스크립트 엔진이 내장되어 있는데요. 관련 스크립트를 통해 재미난 것들을 할 수가 있지요. 앞으로 이걸로 어디까지 할 수 있을지 알아 보는 시간을 가져보도록 �

itadventure.tistory.com

블렌더의 파이썬 스크립트를 이용하여 달력을 자동 생성하는 스크립트 소스입니다.
달력을 생성하는 스크립트 소스는 순수하게 크레이가 제작하였고
오픈 소스로 공개하니 필요하신 분은 자유롭게 사용하세요 :)
애드온까지는 안 만들었는데 나중에 진행할까 생각중입니다

# Calendar Library
# author : cray Fall / 크레이
# https://itadventure.tistory.com/ 크레이의 IT 탐구

import bpy
from math import radians

# console write
def print(*datas):
    window=bpy.context.window_manager.windows[0]
    screen = window.screen
    for area in screen.areas:
        if area.type == 'CONSOLE':
            for data in datas:
                bpy.ops.console.scrollback_append(
                    {'window': window, 'screen': screen, 'area': area},
                    text=str(data))

# calendar class
class CalendarClass:
    monDays = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

    def isLeapYear(self, year):
        if year % 400 == 0:
            return True
        if year % 100 == 0:
            return False
        if year % 4 == 0:
            return True
        return False
    
    def monDay(self, year, mon):
        if(mon==2 and self.isLeapYear(year)):
            return 29
        return self.monDays[mon-1]
    
    def firstDayOfWeek(self, year, mon):
        # 0001-01-01 : monday
        # 0=sunday, 1=monday, ... 6=satday
        # 1 year = 365 day
        # leap year = 366 day
        weekday=1
        for i in range(1, year):
            if self.isLeapYear(i):
                weekday = ( weekday + 366 ) % 7
            else:
                weekday = ( weekday + 365 ) % 7
        for j in range(1, mon):
            weekday = (weekday + self.monDay(year, j)) % 7
        return weekday
    
    def calendar_matrix(self, year, mon):
        calendar_matrix_data = (
            ["", "", "", "", "", "", ""],
            ["", "", "", "", "", "", ""],
            ["", "", "", "", "", "", ""],
            ["", "", "", "", "", "", ""],
            ["", "", "", "", "", "", ""],
            ["", "", "", "", "", "", ""],
            ["", "", "", "", "", "", ""],
        )
        row = 0
        col = self.firstDayOfWeek(year, mon)
        lastday = self.monDay(year, mon)
        for i in range(1, lastday+1):
            calendar_matrix_data[row][col]=str(i)
            col = col + 1
            if col >= 7:
                col = 0
                row = row + 1
                    
        return calendar_matrix_data  


 

# calculate calendar matrix
Calendar = CalendarClass()
mat = Calendar.calendar_matrix(year,mon)

# put title
bpy.ops.object.text_add(
    location=(5, 0, 10 + 2),
    rotation=(radians(90) ,0, 0))
bpy.context.object.data.body = str(year) + '. ' + str(mon)
bpy.context.object.data.bevel_depth = 0.03
bpy.context.object.data.extrude = 0.07

# put calendar matrix
for row in range(0, 6):
    for col in range(0, 7):
        if mat[row][col] != "":
            bpy.ops.object.text_add(
                location=(col * 2, 0, 10 - row * 2),
                rotation=(radians(90) ,0, 0))
            bpy.context.object.data.body = mat[row][col]
            bpy.context.object.data.align_x = 'RIGHT'
            bpy.context.object.data.bevel_depth = 0.06
            bpy.context.object.data.extrude = 0.07

# back panel
bpy.ops.mesh.primitive_plane_add(
    location=(0, 0, 0),
    rotation=(radians(90) ,0, 0)
)
bpy.ops.transform.resize(value=(8, 5, 8))
bpy.ops.transform.translate(value=(5.5, 0.1, 6))


print('3d calendar done.');

생성할 연, 월을 변경하시려면 소스 중간에 year, mon 값을 바꿔주시고 장면의 오브젝트를 삭제하신 다음에 실행해주시면 됩니다.

year = 2020
mon = 8

달력에 색깔과 태양광을 넣어본 결과물입니다.

이번 자료도 필요하신 분에게 되셨을지요?
오늘도 방문해주셔서 감사합니다 :)


다음 게시글 : https://itadventure.tistory.com/335

 

블렌더 파이썬 팁 - 파이썬 개발도구

첫 게시글 보기 : https://itadventure.tistory.com/319 3D 블렌더 2.83 + 파이썬 스크립트와의 만남 3D 블렌더 프로그램에는 파이썬 스크립트 엔진이 내장되어 있는데요. 관련 스크립트를 통해 재미난 것들을

itadventure.tistory.com

 

반응형