هوش مصنوعی در Rhino و Grasshopper؛ آموزش طراحی پارامتریک، تولید مدل سه‌بعدی و اتصال به AI

در این آموزش یاد می‌گیرید چگونه Rhino 8 و Grasshopper را به API هوش مصنوعی درواره متصل کنید، توضیح متنی را به پارامترهای کنترل‌شده تبدیل کنید و مدل مفهومی سه‌بعدی بسازید.

Share
هوش مصنوعی در Rhino و Grasshopper؛ آموزش طراحی پارامتریک، تولید مدل سه‌بعدی و اتصال به AI

ترکیب Rhino، Grasshopper و هوش مصنوعی می‌تواند شیوه طراحی فرم‌های سه‌بعدی و سیستم‌های پارامتریک را تغییر دهد. به‌جای اینکه کاربر تمام ورودی‌های یک Definition را به‌صورت دستی تنظیم کند، می‌توان توضیح متنی پروژه را به پارامترهای کنترل‌شده تبدیل کرد، چند گزینه طراحی ساخت، محدودیت‌ها را بررسی کرد و هندسه‌های مفهومی را در Grasshopper تولید کرد.

برای مثال، کاربر می‌تواند بنویسد:

یک برج مفهومی ۲۴ طبقه با پلان شش‌ضلعی، فرم باریک‌شونده و چرخش ملایم طراحی کن.

مدل زبانی این توضیح را به داده‌ای ساختاریافته مانند تعداد طبقات، ارتفاع طبقه، شعاع پایه، شعاع رأس، تعداد اضلاع و میزان چرخش تبدیل می‌کند. Grasshopper سپس براساس این پارامترها هندسه را می‌سازد.

مزیت اصلی این روش آن است که هوش مصنوعی مستقیماً و بدون محدودیت هندسه دلخواه تولید نمی‌کند. مدل فقط پارامترهایی را پیشنهاد می‌دهد که در محدوده از پیش تعریف‌شده قرار دارند و Grasshopper مسئول ساخت هندسه معتبر است.

در این مقاله یاد می‌گیرید:

  • Rhino و Grasshopper چه تفاوتی دارند
  • هوش مصنوعی در کدام مراحل طراحی پارامتریک کاربرد دارد
  • چه قابلیت‌هایی در Rhino 8 برای توسعه ابزارهای هوشمند وجود دارد
  • چگونه Python 3 را در Grasshopper اجرا کنید
  • چگونه Grasshopper را به API درواره متصل کنید
  • چگونه متن فارسی را به پارامترهای JSON تبدیل کنید
  • چگونه از پارامترها یک فرم سه‌بعدی مفهومی بسازید
  • چگونه مقادیر تولیدشده را محدود و اعتبارسنجی کنید
  • چرا نباید کد تولیدشده توسط مدل را خودکار اجرا کرد
  • چگونه یک دستیار طراحی پارامتریک واقعی بسازید

Rhino چیست؟

Rhinoceros یا Rhino یک نرم‌افزار مدل‌سازی سه‌بعدی است که بیشتر برای طراحی صنعتی، معماری، جواهرات، ساخت دیجیتال، طراحی محصول، کشتی‌سازی و فرم‌های پیچیده استفاده می‌شود.

Rhino به‌خصوص در مدل‌سازی NURBS قدرتمند است و امکان کار با انواع مختلف هندسه را فراهم می‌کند:

  • Curve
  • Surface
  • Polysurface
  • Mesh
  • SubD
  • Point Cloud
  • Solid
  • Annotation
  • Block

Rhino 8 قابلیت‌هایی مانند ShrinkWrap، PushPull، SubD Creases، ابزارهای بهتر ترسیم، موتور رندر سریع‌تر و محیط جدید Script Editor را ارائه کرده است. فهرست امکانات در صفحه رسمی قابلیت‌های Rhino 8 موجود است.

Grasshopper چیست؟

Grasshopper یک محیط Visual Programming است که داخل Rhino اجرا می‌شود. کاربر به‌جای نوشتن برنامه خط‌به‌خط، Componentها را روی Canvas قرار می‌دهد و با اتصال ورودی و خروجی آن‌ها یک سیستم پارامتریک می‌سازد.

برای مثال می‌توان:

  • تعداد طبقات ساختمان را با Slider کنترل کرد
  • نمای پارامتریک ساخت
  • الگوی پنل‌بندی تولید کرد
  • مسیر حرکت خورشید را تحلیل کرد
  • سطح را به قطعات قابل‌ساخت تقسیم کرد
  • فرم سازه را براساس نیرو تغییر داد
  • صدها گزینه طراحی تولید کرد
  • داده‌ها را از فایل یا API دریافت کرد
  • هندسه را به Revit منتقل کرد

براساس معرفی رسمی Rhino، Grasshopper به‌صورت مستقیم با ابزارهای مدل‌سازی Rhino یکپارچه است و برای ساخت فرم‌های مولد الزاماً به دانش برنامه‌نویسی نیاز ندارد.

آیا Rhino و Grasshopper هوش مصنوعی داخلی دارند؟

Rhino 8 یک چت‌بات عمومی یا ابزار داخلی Text-to-3D ندارد که با نوشتن یک جمله، پروژه کامل معماری تولید کند.

زیرساخت اصلی Rhino برای ساخت ابزارهای هوشمند شامل موارد زیر است:

  • Script Editor
  • Python 3
  • C#
  • RhinoCommon
  • Grasshopper Script Component
  • Package Manager
  • Rhino.Compute
  • Rhino.Inside
  • Plugin SDK

بنابراین هوش مصنوعی معمولاً از طریق اسکریپت، افزونه، API یا سرویس بیرونی به Rhino و Grasshopper متصل می‌شود.

قابلیتداخل Rhino یا Grasshopperنیازمند مدل بیرونی
مدل‌سازی NURBSبلهخیر
طراحی پارامتریکبلهخیر
اجرای Python 3بلهخیر
تولید متن و تحلیل Briefخیربله
تبدیل زبان طبیعی به JSONخیربله
تحلیل تصویر مرجعخیربله
تولید تکسچر یا کانسپتخیربله
ساخت هندسه از پارامتربلهخیر
رندر هوشمندبا موتورهای مکملمعمولاً بله
ساخت دستیار اختصاصیزیرساخت آن موجود استبله

بهترین کاربردهای هوش مصنوعی در Rhino و Grasshopper

تبدیل Brief به پارامتر

هوش مصنوعی می‌تواند توضیح کارفرما را به مقادیری تبدیل کند که Grasshopper قادر به استفاده از آن‌ها باشد.

تولید چند گزینه طراحی

یک مدل زبانی می‌تواند چند ترکیب پارامتری پیشنهاد دهد و Grasshopper هندسه تمام گزینه‌ها را ایجاد کند.

توضیح Definition

Definitionهای بزرگ Grasshopper ممکن است پیچیده شوند. مدل زبانی می‌تواند نام Componentها، ورودی‌ها و منطق کلی آن‌ها را مستند کند.

تولید نسخه اولیه Python یا C#

هوش مصنوعی می‌تواند نقطه شروع یک Script Component را تولید کند، اما کد باید توسط توسعه‌دهنده بررسی شود.

تحلیل خطا

متن خطا، ورودی‌ها و بخش مرتبط اسکریپت را می‌توان برای توضیح و پیشنهاد اصلاح به مدل زبانی داد.

پیشنهاد ساختار الگوریتم

برای مثال، مدل می‌تواند پیشنهاد دهد که یک مسئله پنل‌بندی با چه مراحل محاسباتی حل شود.

ساخت پرامپت رندر

مدل می‌تواند مشخصات فرم، متریال و محیط را به پرامپت تولید تصویر تبدیل کند.

پردازش داده

داده‌های متنی، جداول و توضیحات پروژه می‌توانند پیش از ورود به Grasshopper پاک‌سازی و ساختاریافته شوند.

معماری مناسب اتصال هوش مصنوعی به Grasshopper

بهترین معماری این نیست که مدل هوش مصنوعی کد دلخواه تولید کند و Grasshopper همان کد را اجرا کند.

جریان کاری امن‌تر:

  1. کاربر توضیح پروژه را وارد می‌کند.
  2. Grasshopper متن را به API می‌فرستد.
  3. مدل فقط JSON با فیلدهای از پیش تعریف‌شده برمی‌گرداند.
  4. اسکریپت پاسخ را Parse می‌کند.
  5. مقادیر اعتبارسنجی می‌شوند.
  6. مقادیر خارج از محدوده محدود یا رد می‌شوند.
  7. Grasshopper با الگوریتم از پیش نوشته‌شده هندسه را می‌سازد.
  8. کاربر نتیجه را بررسی می‌کند.

این روش قابلیت پیش‌بینی و کنترل بسیار بیشتری دارد.

قابلیت‌های برنامه‌نویسی Rhino 8

Rhino 8 یک Script Editor جدید دارد که از Python و C# پشتیبانی می‌کند. براساس صفحه رسمی ویژگی‌های Rhino، محیط اسکریپت‌نویسی Rhino 8 از RhinoCommon و CPython در Rhino و Grasshopper روی Windows و macOS پشتیبانی می‌کند.

برای بازکردن Script Editor در Rhino، این دستور را وارد کنید:

ScriptEditor

در نخستین اجرا، آماده‌سازی محیط Python 3 ممکن است کمی زمان ببرد. مستندات رسمی نیز توضیح می‌دهند که Script Editor هنگام اولین اجرا محیط CPython را مقداردهی می‌کند. جزئیات در راهنمای Script Editor راینو موجود است.

Python 3 در Grasshopper

برای افزودن Python 3 Script Component:

  1. Rhino 8 را اجرا کنید.
  2. دستور Grasshopper را وارد کنید.
  3. در Grasshopper وارد تب Maths شوید.
  4. بخش Script را باز کنید.
  5. یک Script Component روی Canvas قرار دهید.
  6. زبان Component را روی Python 3 تنظیم کنید.

در نسخه‌های جدید می‌توانید از Script Component عمومی یا Python 3 Script Component استفاده کنید. راهنمای رسمی آن در مستندات Python در Grasshopper ارائه شده است.

آزمایش ساده Python در Grasshopper

ابتدا یک Component ساده بسازید.

ورودی‌ها:

x
y

خروجی:

result

کد:

result = x + y

دو Number Slider را به ورودی‌ها متصل کنید. اگر جمع آن‌ها در خروجی نمایش داده شد، محیط Python آماده است.

دسترسی به Rhino.Geometry

برای ساخت هندسه از کتابخانه Rhino.Geometry استفاده می‌کنیم:

import Rhino.Geometry as rg

point = rg.Point3d(0, 0, 0)
circle = rg.Circle(point, 10)
curve = circle.ToNurbsCurve()

RhinoCommon مجموعه‌ای از کلاس‌های هندسی مانند Point، Vector، Curve، Surface، Mesh، Brep و Transform را در اختیار توسعه‌دهنده قرار می‌دهد.

اتصال Grasshopper به API درواره

درواره یک API هوش مصنوعی سازگار با ساختار OpenAI ارائه می‌دهد. می‌توان از Python 3 داخل Rhino یا Grasshopper برای ارسال درخواست استفاده کرد.

آدرس پایه:

https://api.darvareh.ir/v1

Endpoint مورد استفاده:

https://api.darvareh.ir/v1/chat/completions

مقادیر نمونه:

YOUR_DARVAREH_API_KEY
YOUR_MODEL_ID

برای مشاهده مدل‌های موجود، قابلیت‌ها و قیمت به‌روز به صفحه مدل‌های درواره مراجعه کنید.

پروژه عملی: تبدیل متن فارسی به برج پارامتریک

در این پروژه، کاربر یک توضیح فارسی می‌نویسد. مدل هوش مصنوعی فقط این پارامترها را برمی‌گرداند:

  • تعداد طبقات
  • ارتفاع هر طبقه
  • شعاع پایین
  • شعاع بالا
  • میزان چرخش
  • تعداد اضلاع پلان

Grasshopper سپس پلان طبقات را می‌سازد.

این تمرین یک مدل اجرایی یا سازه‌ای تولید نمی‌کند. هدف آن نمایش یک Workflow کنترل‌شده برای Concept Design است.

ساخت ورودی‌های Component

یک Python 3 Script Component روی Canvas قرار دهید و ورودی‌ها را به این نام‌ها تغییر دهید:

Prompt
Run
ApiKey
ModelId

نوع دسترسی ورودی‌ها را روی Item قرار دهید.

Componentهای لازم:

  • Panel برای Prompt
  • Button برای Run
  • Panel برای ApiKey
  • Panel برای ModelId

خروجی‌ها را به این نام‌ها تغییر دهید:

Geometry
Parameters
Status

کد کامل Grasshopper

import json
import math
import urllib.request
import urllib.error
import Rhino.Geometry as rg

Geometry = []
Parameters = ""
Status = "Ready"


def clamp(value, minimum, maximum):
    return max(minimum, min(value, maximum))


def remove_code_fence(text):
    cleaned = text.strip()

    if cleaned.startswith("```json"):
        cleaned = cleaned[7:]
    elif cleaned.startswith("```"):
        cleaned = cleaned[3:]

    if cleaned.endswith("```"):
        cleaned = cleaned[:-3]

    return cleaned.strip()


def request_parameters(prompt, api_key, model_id):
    endpoint = "https://api.darvareh.ir/v1/chat/completions"

    system_prompt = """
You convert Persian architectural concept descriptions into controlled JSON.

Return exactly one JSON object and no additional text.

Schema:
{
  "floors": integer,
  "floor_height": number,
  "base_radius": number,
  "top_radius": number,
  "twist_degrees": number,
  "sides": integer,
  "summary_fa": string
}

Allowed ranges:
- floors: 3 to 80
- floor_height: 2.5 to 6.0 meters
- base_radius: 3 to 50 meters
- top_radius: 3 to 50 meters
- twist_degrees: -360 to 360 degrees
- sides: 3 to 12

Interpret the request conservatively.
Do not add fields.
Do not return Python code.
Do not return Markdown.
This output is only for conceptual geometry, not structural design.
"""

    payload = {
        "model": model_id,
        "messages": [
            {
                "role": "system",
                "content": system_prompt
            },
            {
                "role": "user",
                "content": prompt
            }
        ],
        "temperature": 0.2
    }

    request = urllib.request.Request(
        endpoint,
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Authorization": "Bearer " + api_key,
            "Content-Type": "application/json"
        },
        method="POST"
    )

    with urllib.request.urlopen(request, timeout=60) as response:
        response_data = json.loads(
            response.read().decode("utf-8")
        )

    content = response_data["choices"][0]["message"]["content"]
    clean_content = remove_code_fence(content)

    return json.loads(clean_content)


def validate_parameters(data):
    validated = {
        "floors": int(clamp(
            int(data.get("floors", 12)),
            3,
            80
        )),
        "floor_height": float(clamp(
            float(data.get("floor_height", 3.3)),
            2.5,
            6.0
        )),
        "base_radius": float(clamp(
            float(data.get("base_radius", 10)),
            3,
            50
        )),
        "top_radius": float(clamp(
            float(data.get("top_radius", 8)),
            3,
            50
        )),
        "twist_degrees": float(clamp(
            float(data.get("twist_degrees", 0)),
            -360,
            360
        )),
        "sides": int(clamp(
            int(data.get("sides", 6)),
            3,
            12
        )),
        "summary_fa": str(
            data.get("summary_fa", "فرم مفهومی پارامتریک")
        )
    }

    return validated


def create_floor_polygon(z, radius, rotation_degrees, sides):
    points = []
    rotation_radians = math.radians(rotation_degrees)

    for index in range(sides):
        angle = (
            (2.0 * math.pi * index / sides)
            + rotation_radians
        )

        x = radius * math.cos(angle)
        y = radius * math.sin(angle)

        points.append(rg.Point3d(x, y, z))

    points.append(points[0])

    polyline = rg.Polyline(points)
    return rg.PolylineCurve(polyline)


def create_tower(data):
    curves = []

    floors = data["floors"]
    floor_height = data["floor_height"]
    base_radius = data["base_radius"]
    top_radius = data["top_radius"]
    twist_degrees = data["twist_degrees"]
    sides = data["sides"]

    denominator = max(floors - 1, 1)

    for floor_index in range(floors):
        factor = floor_index / float(denominator)

        z = floor_index * floor_height

        radius = (
            base_radius
            + (top_radius - base_radius) * factor
        )

        rotation = twist_degrees * factor

        floor_curve = create_floor_polygon(
            z,
            radius,
            rotation,
            sides
        )

        curves.append(floor_curve)

    return curves


if Run:
    if not Prompt:
        Status = "Prompt is empty."

    elif not ApiKey:
        Status = "API key is missing."

    elif not ModelId:
        Status = "Model ID is missing."

    else:
        try:
            raw_parameters = request_parameters(
                Prompt,
                ApiKey,
                ModelId
            )

            valid_parameters = validate_parameters(
                raw_parameters
            )

            Geometry = create_tower(valid_parameters)

            Parameters = json.dumps(
                valid_parameters,
                ensure_ascii=False,
                indent=2
            )

            Status = "Conceptual geometry generated successfully."

        except urllib.error.HTTPError as error:
            details = error.read().decode(
                "utf-8",
                errors="replace"
            )

            Status = (
                "HTTP Error "
                + str(error.code)
                + ": "
                + details
            )

        except urllib.error.URLError as error:
            Status = "Connection Error: " + str(error.reason)

        except json.JSONDecodeError as error:
            Status = "Invalid JSON response: " + str(error)

        except Exception as error:
            Status = "Unexpected Error: " + str(error)

اجرای پروژه

در Panel مربوط به Prompt بنویسید:

یک برج مفهومی ۲۴ طبقه با پلان شش‌ضلعی طراحی کن.
فرم از پایین به بالا کمی باریک شود و در مجموع ۹۰ درجه بچرخد.
ارتفاع طبقات برای یک ساختمان اداری معمولی مناسب باشد.

در Panel مربوط به ApiKey:

YOUR_DARVAREH_API_KEY

در Panel مربوط به ModelId:

YOUR_MODEL_ID

سپس Button را فشار دهید.

خروجی Geometry شامل مجموعه‌ای از منحنی‌های بسته خواهد بود که پلان طبقات را نمایش می‌دهند.

خروجی Parameters ممکن است مشابه این باشد:

{
  "floors": 24,
  "floor_height": 3.6,
  "base_radius": 14.0,
  "top_radius": 10.5,
  "twist_degrees": 90.0,
  "sides": 6,
  "summary_fa": "برج اداری مفهومی با پلان شش‌ضلعی، باریک‌شوندگی ملایم و چرخش تدریجی"
}

چرا از JSON استفاده کردیم؟

اگر مدل یک متن آزاد برگرداند، Grasshopper نمی‌تواند با اطمینان آن را به پارامتر تبدیل کند.

JSON مزایای مهمی دارد:

  • فیلدها مشخص‌اند
  • Parse کردن ساده است
  • نوع داده قابل‌بررسی است
  • می‌توان محدوده عددی تعیین کرد
  • خطا قابل‌شناسایی است
  • داده برای Componentهای دیگر قابل‌استفاده است

این معماری نمونه‌ای از Structured Output است، حتی اگر اعتبارسنجی نهایی در کد انجام شود.

اهمیت اعتبارسنجی پارامترها

نباید فرض کنیم مدل همیشه محدودیت‌ها را رعایت می‌کند. در کد، تمام مقادیر Clamp شده‌اند.

برای مثال:

floors = clamp(floors, 3, 80)

اگر مدل تعداد طبقات را 500 برگرداند، اسکریپت آن را به 80 محدود می‌کند.

محدودیت‌ها باید براساس پروژه واقعی تعیین شوند. برای مثال در یک سیستم طراحی مبلمان ممکن است محدوده‌ها به میلی‌متر تعریف شوند.

تبدیل منحنی طبقات به حجم

خروجی تمرین شامل منحنی پلان است. برای ساخت فرم اولیه می‌توانید از Componentهای Grasshopper استفاده کنید:

  1. خروجی Geometry را به Loft متصل کنید.
  2. گزینه Closed Loft را بررسی کنید.
  3. از Cap Holes برای بستن ابتدا و انتهای حجم استفاده کنید.
  4. حجم را با Brep Join بررسی کنید.
  5. در صورت نیاز سطح را پنل‌بندی کنید.

ترتیب ساده:

Python Geometry → Loft → Cap Holes → Brep

برای ساخت Floor Slab:

Curves → Boundary Surfaces → Extrude

برای هر طبقه می‌توان مقدار Extrude کوچکی مانند ضخامت مفهومی دال در نظر گرفت.

ساخت چند گزینه طراحی

به‌جای یک خروجی می‌توانید از مدل بخواهید سه گزینه JSON بسازد:

{
  "options": [
    {
      "name": "گزینه A",
      "floors": 18,
      "floor_height": 3.4,
      "base_radius": 13,
      "top_radius": 11,
      "twist_degrees": 30,
      "sides": 6
    },
    {
      "name": "گزینه B",
      "floors": 24,
      "floor_height": 3.6,
      "base_radius": 14,
      "top_radius": 9,
      "twist_degrees": 90,
      "sides": 8
    }
  ]
}

سپس برای هر گزینه یک Data Branch جداگانه بسازید.

در نسخه حرفه‌ای می‌توان گزینه‌ها را براساس این معیارها مقایسه کرد:

  • زیربنا
  • نسبت سطح به حجم
  • ارتفاع
  • تعداد پنل
  • میزان پیچش
  • سطح پوسته
  • سایه‌اندازی
  • مصرف تقریبی متریال
  • پیچیدگی ساخت

مدل زبانی نباید محاسبات هندسی دقیق را حدس بزند. مقادیر باید توسط Grasshopper محاسبه شوند.

نقش صحیح مدل زبانی و Grasshopper

وظیفهمدل زبانیGrasshopper
فهم توضیح فارسیمناسبمحدود
پیشنهاد پارامترمناسببراساس ورودی
محاسبه هندسه دقیقنامناسب به‌تنهاییبسیار مناسب
کنترل محدودهقابل‌پیشنهادباید اجرا کند
ساخت NURBSغیرمستقیممناسب
محاسبه مساحتنباید حدس بزنددقیق
تحلیل گزینه‌هامناسب با داده واقعیتولید داده
تصمیم اجراییخیرخیر، نیازمند متخصص

هوش مصنوعی باید زبان طبیعی را به داده تبدیل کند و Grasshopper باید هندسه و محاسبات دقیق را انجام دهد.

اتصال Brief معماری به Definition موجود

فرض کنید یک Definition برای نمای پارامتریک دارید که این ورودی‌ها را می‌گیرد:

  • تعداد طبقات
  • عرض پنل
  • عمق سایه‌بان
  • درصد پنل باز
  • میزان چرخش پنل
  • تراکم الگو

می‌توانید Schema را چنین تعریف کنید:

{
  "floor_count": 12,
  "panel_width": 1.2,
  "shade_depth": 0.45,
  "open_ratio": 0.35,
  "panel_rotation": 18,
  "pattern_density": 0.6
}

کاربر می‌نویسد:

نمایی با سایه‌اندازی متوسط می‌خواهم که بیش از حد بسته نباشد.
پنل‌ها کمی چرخش داشته باشند و الگو در طبقات بالا سبک‌تر شود.

مدل این توضیح را به پارامتر تبدیل می‌کند، اما محدوده‌ها همچنان در Definition کنترل می‌شوند.

استفاده از هوش مصنوعی برای نوشتن Grasshopper Script

پرامپت ضعیف:

برای من کد Grasshopper بنویس.

پرامپت مناسب:

برای Python 3 Script Component در Rhino 8 کد بنویس.

ورودی‌ها:
- curves: List Access از Curve
- distance: Item Access از float

خروجی:
- offset_curves

شرایط:
- از Rhino.Geometry استفاده شود
- Curveهای Null نادیده گرفته شوند
- distance باید بین 0.01 و 100 محدود شود
- اگر Offset شکست خورد، خطا برای همان Curve گزارش شود
- هیچ فایل یا Command خارجی اجرا نشود
- هندسه ورودی تغییر نکند
- کد را خط‌به‌خط توضیح بده

هرچه ورودی، خروجی، نوع داده و محدودیت مشخص‌تر باشد، احتمال دریافت کد قابل‌استفاده بیشتر است.

چرا اجرای خودکار کد تولیدشده خطرناک است؟

کدی که مدل تولید می‌کند ممکن است:

  • فایل را حذف یا بازنویسی کند
  • Definition را قفل کند
  • حلقه بسیار سنگین بسازد
  • حافظه را پر کند
  • Rhino را متوقف کند
  • هندسه اصلی را تغییر دهد
  • داده را به سرویس بیرونی ارسال کند
  • Package نامطمئن نصب کند

روش مناسب:

  1. کد فقط به‌صورت متن دریافت شود.
  2. کاربر آن را بررسی کند.
  3. کد روی فایل آزمایشی اجرا شود.
  4. تعداد Iteration محدود باشد.
  5. Timeout در درخواست شبکه وجود داشته باشد.
  6. دسترسی فایل و سیستم محدود شود.
  7. نسخه پشتیبان از پروژه نگه‌داری شود.

جلوگیری از اجرای تکراری API در Grasshopper

Grasshopper با هر تغییر ورودی دوباره Solution را اجرا می‌کند. اگر درخواست API مستقیماً به Slider متصل باشد، ممکن است با هر حرکت Slider چند درخواست ارسال شود.

راه‌حل:

  • از Button استفاده کنید
  • درخواست را فقط وقتی Run=True است اجرا کنید
  • نتیجه را Cache کنید
  • از Data Dam استفاده کنید
  • تغییرات Slider را از تماس API جدا کنید
  • نتیجه JSON را در Panel یا فایل پروژه ذخیره کنید

در تمرین ما Button باعث می‌شود تماس API فقط با اقدام کاربر انجام شود.

نگه‌داری امن کلید API

قرار دادن کلید در Panel برای آزمایش ساده است، اما برای پروژه واقعی مناسب نیست؛ زیرا ممکن است کلید همراه فایل Grasshopper منتشر شود.

روش مناسب‌تر استفاده از Environment Variable است.

در Windows PowerShell:

setx DARVAREH_API_KEY "YOUR_DARVAREH_API_KEY"

سپس Rhino را دوباره اجرا کنید.

در Python:

import os

api_key = os.getenv("DARVAREH_API_KEY")

if not api_key:
    raise RuntimeError(
        "DARVAREH_API_KEY is not configured."
    )

مزایا:

  • کلید داخل فایل .gh قرار نمی‌گیرد
  • اشتراک Definition امن‌تر است
  • تغییر کلید ساده‌تر می‌شود
  • یک کد در چند سیستم قابل‌استفاده است

ساخت دستیار طراحی پارامتریک

نسخه پیشرفته‌تر ابزار می‌تواند این بخش‌ها را داشته باشد:

  • ورودی Brief فارسی
  • انتخاب نوع پروژه
  • انتخاب Schema
  • تعیین محدودیت پارامترها
  • ساخت چند گزینه
  • نمایش JSON
  • تأیید کاربر
  • تولید هندسه
  • محاسبه شاخص‌ها
  • مقایسه گزینه‌ها
  • ذخیره گزینه منتخب

Workflow:

Brief → AI → JSON → Validation → Grasshopper → Geometry → Metrics → Review

استفاده از مدل بینایی برای تحلیل فرم

می‌توانید Screenshot یا Render فرم را به یک مدل دارای ورودی تصویر بدهید.

پرامپت:

این تصویر یک فرم مفهومی تولیدشده در Rhino و Grasshopper است.

آن را از نظر موارد زیر تحلیل کن:
1. خوانایی فرم
2. نسبت پایه به ارتفاع
3. میزان باریک‌شوندگی
4. شدت چرخش
5. ریتم طبقات
6. پیچیدگی ساخت
7. کیفیت Silhouette
8. تکرارپذیری پنل‌ها
9. نقاط دارای اعوجاج
10. پیشنهاد سه اصلاح پارامتریک

برای هر پیشنهاد دقیقاً مشخص کن کدام پارامتر باید افزایش یا کاهش پیدا کند.
درباره پایداری سازه‌ای ادعای قطعی نکن.

مدل می‌تواند پیشنهاد دهد که Twist کمتر یا Taper بیشتر شود، اما بررسی سازه‌ای به تحلیل تخصصی نیاز دارد.

استفاده از Rhino.Inside

Rhino.Inside اجازه می‌دهد Rhino و Grasshopper داخل بعضی نرم‌افزارهای 64 بیتی Windows اجرا شوند. یکی از شناخته‌شده‌ترین نمونه‌ها Rhino.Inside.Revit است.

براساس معرفی رسمی Rhino.Inside، می‌توان:

  • Rhino و Grasshopper را داخل نرم‌افزار میزبان اجرا کرد
  • از API نرم‌افزار میزبان استفاده کرد
  • آبجکت‌های Native ایجاد کرد
  • داده را میان Grasshopper و میزبان منتقل کرد

یک Workflow هوشمند می‌تواند چنین باشد:

Brief → مدل زبانی → پارامترها → Grasshopper → هندسه → Rhino.Inside → Revit

در این جریان، انتقال به BIM باید با کنترل Category، Level، Type و مشخصات فنی انجام شود.

تولید افزونه از Script

Script Editor راینو می‌تواند Script را به Command یا Plugin تبدیل کند. براساس مستندات ساخت Script Plugin، امکان انتشار Script به‌صورت:

  • Rhino Command
  • فایل .rhp
  • Grasshopper Component
  • فایل .gha
  • Yak Package

وجود دارد.

پس از آزمایش Prototype می‌توانید ابزار را به یک افزونه داخلی برای دفتر معماری تبدیل کنید.

نمونه کاربردهای واقعی

طراحی برج

متن پروژه به تعداد طبقات، Taper، Twist و شکل پلان تبدیل می‌شود.

طراحی نما

زبان طبیعی به اندازه پنل، چرخش، تراکم و عمق سایه‌بان تبدیل می‌شود.

طراحی غرفه

شرح مفهومی به شبکه، تعداد دهانه و ارتفاع نقاط کنترل تبدیل می‌شود.

طراحی محصول

توضیح ارگونومی به ابعاد پایه قابل‌آزمایش تبدیل می‌شود.

ساخت دیجیتال

مدل می‌تواند فرایند ساخت را توضیح دهد و Grasshopper قطعات، شماره‌گذاری و نقشه برش را تولید کند.

مستندسازی Definition

مدل می‌تواند براساس فهرست Componentها، توضیحات استفاده و راهنمای ورودی‌ها را آماده کند.

چک‌لیست پیش از استفاده حرفه‌ای

API

  • کلید در فایل ذخیره نشده است
  • Timeout تعریف شده است
  • خطاهای HTTP مدیریت می‌شوند
  • تعداد درخواست کنترل می‌شود
  • داده حساس ارسال نمی‌شود

پاسخ مدل

  • خروجی JSON است
  • فیلد اضافی رد می‌شود
  • نوع داده بررسی می‌شود
  • محدوده عددی کنترل می‌شود
  • مقدار پیش‌فرض وجود دارد

Grasshopper

  • Run با Button کنترل می‌شود
  • حلقه بی‌نهایت وجود ندارد
  • تعداد هندسه محدود است
  • Definition روی فایل آزمایشی تست شده است
  • داده‌ها Cache می‌شوند

طراحی

  • خروجی مفهومی معرفی شده است
  • ابعاد واقعی بررسی می‌شوند
  • مدل با نیاز پروژه تطبیق دارد
  • محاسبات توسط Grasshopper انجام می‌شوند
  • تصمیم نهایی توسط متخصص گرفته می‌شود

اشتباهات رایج

درخواست تولید پروژه کامل با یک جمله

مدل زبانی بدون Schema و محدودیت، خروجی قابل‌پیش‌بینی نمی‌دهد.

ارسال مستقیم پاسخ به Eval

هرگز متن یا کد مدل را مستقیماً با eval یا exec اجرا نکنید.

نبود Validation

حتی اگر محدودیت‌ها در System Prompt نوشته شده باشند، کد باید دوباره آن‌ها را کنترل کند.

اتصال API به Slider

این کار ممکن است ده‌ها درخواست ناخواسته ایجاد کند.

اعتماد به محاسبات مدل

مساحت، حجم، طول و تعداد پنل باید توسط Rhino یا Grasshopper محاسبه شوند.

استفاده اجرایی از فرم مفهومی

فرم تولیدشده در تمرین نیازمند توسعه معماری، سازه، تأسیسات، ضوابط و جزئیات ساخت است.

قراردادن API Key در فایل عمومی

کلید را در Repository، فایل عمومی Grasshopper یا Screenshot منتشر نکنید.

پرسش‌های متداول

آیا Rhino 8 هوش مصنوعی داخلی دارد؟

Rhino 8 زیرساخت قوی Python، C#، Script Editor و Plugin دارد، اما یک چت‌بات عمومی داخلی برای تولید مدل کامل از متن ارائه نمی‌کند.

آیا Grasshopper بدون برنامه‌نویسی قابل‌استفاده است؟

بله. Grasshopper یک محیط Visual Programming است و بسیاری از Definitionها بدون کدنویسی ساخته می‌شوند. برای اتصال API، پردازش JSON و منطق سفارشی، Python مفید است.

آیا Rhino 8 از Python 3 پشتیبانی می‌کند؟

بله. Rhino 8 دارای محیط CPython و Script Component جدید برای Rhino و Grasshopper است.

آیا می‌توان از فارسی برای کنترل Grasshopper استفاده کرد؟

بله. متن فارسی به مدل زبانی ارسال و به پارامترهای JSON تبدیل می‌شود. Grasshopper سپس از مقادیر عددی استفاده می‌کند.

آیا هوش مصنوعی مستقیماً فایل Rhino می‌سازد؟

در Workflow این مقاله، مدل فقط پارامتر تولید می‌کند و Rhino/Grasshopper هندسه را می‌سازند. این روش کنترل‌پذیرتر است.

آیا می‌توان از مدل برای تولید GhPython استفاده کرد؟

بله، اما کد باید بازبینی و در فایل آزمایشی اجرا شود. اجرای خودکار کد تولیدشده توصیه نمی‌شود.

آیا می‌توان چند گزینه طراحی تولید کرد؟

بله. Schema می‌تواند شامل آرایه‌ای از گزینه‌ها باشد و Grasshopper هر گزینه را در یک Data Branch جداگانه ایجاد کند.

آیا اتصال به API درواره نیازمند افزونه خاصی است؟

برای نمونه ساده خیر. Python 3 می‌تواند درخواست HTTP ارسال کند. برای محصول نهایی می‌توان افزونه .gha یا .rhp ساخت.

چه مدلی برای Grasshopper مناسب است؟

برای تولید JSON و تحلیل Brief، یک مدل زبانی دقیق مناسب است. برای بررسی Render یا Screenshot باید مدل دارای ورودی تصویر انتخاب شود. فهرست مدل‌ها در صفحه مدل‌های درواره موجود است.

آیا خروجی این روش برای ساخت واقعی مناسب است؟

خروجی اولیه مفهومی است. استفاده اجرایی نیازمند کنترل معماری، سازه، مصالح، روش ساخت و ضوابط پروژه است.

جمع‌بندی

ترکیب Rhino 8، Grasshopper، Python 3 و API هوش مصنوعی یک جریان کاری قدرتمند برای طراحی پارامتریک ایجاد می‌کند. نکته کلیدی این است که وظایف به‌درستی تقسیم شوند:

  • مدل زبانی توضیح طبیعی را درک می‌کند
  • JSON اطلاعات را ساختاریافته می‌کند
  • Validation محدوده‌ها را کنترل می‌کند
  • Grasshopper هندسه و محاسبات را انجام می‌دهد
  • Rhino مدل را نمایش و ویرایش می‌کند
  • طراح نتیجه را ارزیابی و تأیید می‌کند

روش مناسب این نیست که هوش مصنوعی کد نامحدود تولید و اجرا کند. معماری حرفه‌ای‌تر آن است که مدل فقط داده محدود و قابل‌اعتبارسنجی تولید کند.

برای ساخت دستیار طراحی پارامتریک، مولد گزینه، تحلیل‌گر فرم یا ابزار هوشمند اختصاصی در Rhino و Grasshopper می‌توانید از API درواره استفاده کنید. فهرست مدل‌ها، قابلیت‌ها و قیمت به‌روز در صفحه مدل‌های درواره ارائه می‌شود.

مقالات مرتبط

برای مطالعه شرایط استفاده و محدودیت‌های مسئولیت، صفحه «سلب مسئولیت» را مشاهده کنید.

Read more

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی چیست؟ کاربردها و آموزش ساخت AI Automation

اتوماسیون هوش مصنوعی با ترکیب گردش‌کارهای خودکار و مدل‌های هوش مصنوعی، پردازش متن، دسته‌بندی، استخراج اطلاعات و تصمیم‌های پیشنهادی را خودکار می‌کند. در این راهنما، معماری و ساخت نمونه عملی آن با API درواره را می‌آموزید.

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce چیست؟ آینده خرید با ایجنت هوش مصنوعی

Agentic Commerce شیوه‌ای جدید برای خرید اینترنتی است که در آن ایجنت هوش مصنوعی می‌تواند نیاز کاربر را بفهمد، محصولات را جست‌وجو و مقایسه کند و فرایند خرید را پیش ببرد. در این راهنما با معماری، UCP، ACP و پیاده‌سازی آن با API درواره آشنا می‌شوید.