File size: 3,146 Bytes
99ffd02
1d5744a
 
99ffd02
1d5744a
 
a651679
1d5744a
 
 
 
 
 
 
230b8e8
1d5744a
 
 
 
 
 
 
 
b001341
8a22a31
52df11a
76080a9
52df11a
76080a9
 
 
 
 
 
 
 
efcbacd
 
9409984
76080a9
 
 
b001341
76080a9
52df11a
b001341
76080a9
 
52df11a
 
76080a9
 
 
 
 
 
 
 
 
 
 
b001341
 
76080a9
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import gradio as gr
import subprocess
import os

# Запуск setup.sh для настройки окружения и source ~/.bashrc
def run_setup_script():
    setup_script_path = os.path.join(os.path.dirname(__file__), "startup.sh")
    try:
        print("Running setup script...")
        # Выполнить setup.sh и source ~/.bashrc в одной сессии bash
        subprocess.run(
            f"bash -c 'source ~/.bashrc && bash {setup_script_path}'",
            shell=True,
            check=True,
        )       
        print("Setup script and environment initialization completed successfully!")
    except subprocess.CalledProcessError as e:
        print(f"Error while running setup script or sourcing .bashrc: {e}")
        exit(1)

# Выполнить setup.sh перед запуском приложения
run_setup_script()


with gr.Blocks(title="3D Garment Generator",theme=gr.themes.Default(text_size="sm")) as demo:
    with gr.Row():
        # Левый столбец (ввод параметров)
        with gr.Column(scale=1):
            gr.Markdown("### Параметры генерации")
            
            # Загрузка файлов
            pattern_upload = gr.File(label="1. Загрузите лекала (JSON/SVG)", file_types=[".json", ".svg"])
            body_upload = gr.File(label="2. Загрузите 3D-модель тела (OBJ/USD/FBX)", file_types=[".obj", ".usd", ".fbx"])
            
            # Параметры (заглушки)
            with gr.Accordion("3. Параметры генерации", open=False):
                gr.Radio(["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf","SquareNeckHalf","TrapezoidNeckHalf","CircleArcNeckHalf","Bezier2NeckHalf"], label="Front Collar", info="Front collar shape"),
                gr.Radio(["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf","SquareNeckHalf","TrapezoidNeckHalf","CircleArcNeckHalf","Bezier2NeckHalf"], label="Back Collar", info="Back collar shape"),

            # Дополнительные опции (заглушки)
            with gr.Accordion("4. Дополнительные настройки", open=False):
                gr.Dropdown(["Опция 1", "Опция 2"], label="Выберите режим")

        # Правый столбец (3D просмотрщик)
        with gr.Column(scale=2):
            gr.Markdown("### 3D Просмотрщик")
            
            # 3D просмотрщик (поддерживает OBJ/GLB)
            viewer = gr.Model3D(label="Результат генерации", interactive=True)
            
            # Кнопки сохранения
            with gr.Row():
                save_obj_btn = gr.Button("Сохранить OBJ")
                save_render_btn = gr.Button("Сохранить рендер")

    # Логика обновления просмотрщика
    body_upload.change(
        fn=lambda file: file.name if file else None,
        inputs=body_upload,
        outputs=viewer
    )

# Запуск приложения
if __name__ == "__main__":
    demo.launch()