Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from custom_utils.setup_env import run_setup_script | |
| with gr.Blocks(title="3D Garment Generator", theme=gr.themes.Default(text_size="sm")) as demo: | |
| # Состояния для хранения выбранных значений | |
| front_collar = gr.State() | |
| back_collar = gr.State() | |
| render_engine = gr.State() | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### Параметры генерации") | |
| with gr.Row(): | |
| pattern_upload = gr.File( | |
| label="1. Лекала (JSON/SVG)", | |
| file_types=[".json", ".svg"] | |
| ) | |
| body_upload = gr.File( | |
| label="2. Тело (OBJ/USD/FBX)", | |
| file_types=[".obj", ".usd", ".fbx"] | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| with gr.Accordion("3. Параметры генерации", open=False): | |
| front_dropdown = gr.Dropdown( | |
| label="Front Collar", | |
| choices=["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf", "SquareNeckHalf", | |
| "TrapezoidNeckHalf", "CircleArcNeckHalf", "Bezier2NeckHalf"], | |
| interactive=True | |
| ) | |
| back_dropdown = gr.Dropdown( | |
| label="Back Collar", | |
| choices=["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf", "SquareNeckHalf", | |
| "TrapezoidNeckHalf", "CircleArcNeckHalf", "Bezier2NeckHalf"], | |
| interactive=True | |
| ) | |
| with gr.Accordion("4. Render engine", open=False): | |
| render_radio = gr.Radio( | |
| label="Движок рендеринга", | |
| choices=["BPY", "Pyrender/Open3D", "Maya"], | |
| value="Pyrender/Open3D" | |
| ) | |
| with gr.Column(scale=3): | |
| viewer = gr.Model3D(label="3D Просмотрщик", interactive=True) | |
| with gr.Row(): | |
| save_render_btn = gr.Button("Сохранить рендер") | |
| save_obj_btn = gr.Button("Сохранить OBJ") | |
| # Обработчики событий | |
| front_dropdown.change( | |
| lambda x: x, | |
| inputs=front_dropdown, | |
| outputs=front_collar | |
| ) | |
| back_dropdown.change( | |
| lambda x: x, | |
| inputs=back_dropdown, | |
| outputs=back_collar | |
| ) | |
| render_radio.change( | |
| lambda x: x, | |
| inputs=render_radio, | |
| outputs=render_engine | |
| ) | |
| body_upload.change( | |
| lambda file: file.name if file else None, | |
| inputs=body_upload, | |
| outputs=viewer | |
| ) | |
| if __name__ == "__main__": | |
| run_setup_script() | |
| demo.launch() | |