पैरामीटर और व्यंजक
स्केच वास्तव में पैरामीट्रिक तब बनता है जब उसकी विमाएँ हार्ड-कोडेड संख्याओं के बजाय नामित मानों द्वारा संचालित होती हैं. यह पृष्ठ पूरे वर्कफ़्लो से गुज़रता है: पैरामीटर बनाना, उन्हें व्यंजकों के माध्यम से ज्यामिति संचालित करना, और मुख्य विंडो से प्रति-इंस्टेंस मान निर्दिष्ट करना. यह टेक्स्ट बॉक्स में टेम्पलेट व्यंजक भी कवर करता है.
पैरामीटर जोड़ना और संपादित करना
प्रत्येक स्केच अपनी पैरामीटर सूची रखता है, जो स्केच एडिटर के बाएँ Sketch Parameters पैनल में दिखाई देती है. नया बनाने के लिए Add Parameter पर क्लिक करें, पूर्णांक, फ़्लोटिंग पॉइंट संख्या, स्लाइडर, या टेक्स्ट की एक पंक्ति में से चुनते हुए.

प्रत्येक पैरामीटर एक विस्तारणीय पंक्ति है. परिभाषा फ़ील्ड देखने के लिए पंक्ति पर क्लिक करें:
- Label — सूचियों में दिखाया गया सुगम नाम.
- Key — पहचानकर्ता जिसे व्यंजक संदर्भित करते हैं (लेबल से स्वतः व्युत्पन्न, जब तक आप स्वयं टाइप
न करें). इसे एक वैध Python नाम रखें, जैसे
widthयाwall_thickness. - Description — पंक्ति के नीचे दिखाया गया वैकल्पिक नोट.
- Default Value — वह मान जिस पर पैरामीटर शुरू होता है.
- Minimum / Maximum Value — वैकल्पिक सीमाएँ (प्रत्येक के लिए टॉगल सक्षम करें). स्लाइडर पैरामीटर में हमेशा एक परिमित सीमा होती है.
परिवर्तनीय दीवार मोटाई वाले बॉक्स के लिए एक सामान्य सेटअप दो पैरामीटर हैं, width और thickness.
अभी कुछ भी ज्यामिति को बाधित नहीं करता; किसी व्यंजक द्वारा उपयोग होने तक पैरामीटर केवल संख्याओं के
नाम हैं.
व्यंजकों में पैरामीटर उपयोग करना
किसी विमीय कॉन्स्ट्रेंट को डबल-क्लिक करें (कॉन्स्ट्रेंट देखें) और सादी संख्या के बजाय एक व्यंजक दर्ज करें:
width / 2
कॉन्स्ट्रेंट का मान उस व्यंजक का परिणाम बन जाता है, जो स्केच हल होने पर हर बार पुनर्मूल्यांकित होता
है. नीचे के उदाहरण में बायाँ किनारा width / 2 पर बाधित है — उसका मार्कर और लेबल नारंगी में बने
हैं यह दर्शाने के लिए कि वह व्यंजक-संचालित है — जबकि ऊपरी किनारा एक सादा संख्यात्मक विमा रखता है:
width पैरामीटर बदलें और बाधित ज्यामिति साथ चलती है — अब एक संपादन उसे संदर्भित करने वाली हर विमा
अपडेट कर देता है.
व्यंजक पैरामीटरों को अंकगणित और मानक Python गणित फ़ंक्शनों के साथ जोड़ सकते हैं:
width - 2 * thickness
sqrt(area) / 2
2 * pi * radius
sqrt, sin, cos, और tan जैसे फ़ंक्शन, और pi जैसे स्थिरांक, Python के math मॉड्यूल से आते
हैं — वह मॉड्यूल, पैरामीटरों के साथ, ही वह है जिसे कॉन्स्ट्रेंट व्यंजक संदर्भित कर सकता है. स्ट्रिंग
पैरामीटर भी संदर्भित किए जा सकते हैं, जो मुख्यतः टेक्स्ट बॉक्स में उपयोगी है.
मुख्य विंडो में मान निर्दिष्ट करना
स्केच में परिभाषित पैरामीटर उसकी सीमा के लिए डिफ़ॉल्ट का काम करते हैं. जब स्केच दस्तावेज़ में रखा
जाता है, तो प्रत्येक वर्कपीस हर पैरामीटर मान की अपनी प्रतिलिपि रखता है, और दाईं ओर के गुण पैनल का
Sketch Parameters समूह आपको उन्हें प्रति इंस्टेंस बदलने देता है — वही स्केश शीट पर कई आकारों में
उपयोग किया जा सकता है, प्रत्येक अपनी width और thickness के साथ.
मुख्य विंडो में स्केच वर्कपीस चुनें और समूह गुण पैनल में दिखाई देता है, प्रति पैरामीटर एक पंक्ति, प्रत्येक उस मान के साथ जो उस इंस्टेंस उपयोग करता है. नया मान टाइप करें या घुमाएँ; पार्ट तुरंत पुनर्जनित होता है.
पैरामीटर परिभाषाओं को संपादित करना (पैरामीटर जोड़ना, डिफ़ॉल्ट बदलना, या कुंजी का नाम बदलना) ऊपर वर्णित अनुसार स्केच एडिटर के भीतर होता है. मुख्य विंडो पैनल केवल चयनित इंस्टेंस के मान समायोजित करता है — यह हमेशा स्केच के पैरामीटर सेट को दर्शाता है, और आपके बदलने तक नया इंस्टेंस स्केच के डिफ़ॉल्ट उपयोग करता है.
टेक्स्ट बॉक्स में टेम्पलेट व्यंजक
टेक्स्ट बॉक्स हल होने के समय घुंघराले कोष्ठकों में बंद व्यंजकों को हल करते हैं, इसलिए लेबल और उत्कीर्ण टेक्स्ट लाइव मान दिखाते हैं:
W = {width}, H = {height}
कोई भी पैरामीटर नाम से प्रतिस्थापित किया जा सकता है, और परिणाम को कोलन के बाद Python फ़ॉर्मेट स्पेसिफ़ायर से फ़ॉर्मेट किया जा सकता है:
{width}—widthपैरामीटर का वर्तमान मान{name}— स्ट्रिंग-प्रकार पैरामीटर का मान{width:.1f}— एक दशमलव स्थान{timestamp():.0f}— फ़ंक्शन परिणाम पर कोई दशमलव नहीं
गणित यहाँ भी काम करता है, या तो {width * 2} जैसे व्यंजक के रूप में या {sqrt(area):.2f} जैसे
फ़ंक्शन के माध्यम से. कॉन्स्ट्रेंट व्यंजकों की तुलना में, टेक्स्ट टेम्पलेट के पास एक समृद्ध टूलबॉक्स
है: गणित मॉड्यूल के साथ वे नीचे दिए गए अंतर्निहित फ़ंक्शन उजागर करते हैं, और उनके लिए कस्टम फ़ंक्शन
पंजीकृत किए जा सकते हैं (नीचे देखें).
अंतर्निहित टेम्पलेट फ़ंक्शन
| फ़ंक्शन | वापसी प्रकार | विवरण |
|---|---|---|
{today()} | date | वर्तमान UTC तिथि (जैसे, 2026-08-26) |
{date()} | date | today() का उपनाम |
{now()} | datetime | वर्तमान UTC तिथि और समय |
{time()} | time | वर्तमान UTC समय (जैसे, 15:30:00.123456+00:00) |
{timestamp()} | float | Unix टाइमस्टैम्प (युग के बाद सेकंड) |
{uuid4()} | str | 8-वर्ण हेक्स स्ट्रिंग (जैसे, a1b2c3d4) |
{uuid8()} | str | uuid4() का उपनाम |
{uuid()} | str | पूर्ण UUID v4 स्ट्रिंग (36 वर्ण) |
सामान्य उपयोग में प्रति हल अद्वितीय सीरियल नंबर (Part # {uuid4()}), लाइव विमा लेबल
(W={width:.1f} H={height:.1f}), तिथि चिह्न (Date: {today()}), उत्पादन काउंटर
({name} - {count:.0f}pcs), या उत्पादन लॉगिंग के लिए Unix टाइमस्टैम्प ({timestamp():.0f}) शामिल
हैं.
कस्टम टेम्पलेट फ़ंक्शन
आप टेक्स्ट बॉक्स टेम्पलेट के भीतर उपयोग के लिए अपने स्वयं के फ़ंक्शन पंजीकृत कर सकते हैं. यह डेटाबेस से सीरियल नंबर खींचने, बाहरी डेटा पढ़ने, या कस्टम लेबल जनरेट करने के लिए उपयोगी है.
पंजीकरण स्क्रिप्ट लिखना
एक Python फ़ाइल बनाएँ (जैसे ~/.config/rayforge/my_functions.py):
"""Register custom template functions for text box expressions."""
import sqlite3
from sketcher.core.template_functions import register_template_function
DB_PATH = "/home/you/production.db"
def next_serial() -> str:
"""Fetch and reserve the next serial number from the database."""
conn = sqlite3.connect(DB_PATH)
try:
cur = conn.execute(
"UPDATE counters SET value = value + 1 "
"WHERE name = 'serial' RETURNING value"
)
row = cur.fetchone()
conn.commit()
return f"SN-{row[0]:06d}"
finally:
conn.close()
register_template_function("next_serial", next_serial)
प्रत्येक फ़ंक्शन के लिए register_template_function(name, callable) कॉल करें. फ़ंक्शन कुछ भी कर
सकता है जो Python कर सकता है — फ़ाइलें खोलना, डेटाबेस से कनेक्ट होना, API कॉल करना — और इसे हर
रेंडर पर कॉल किया जाता है, इसलिए इसे तेज़ होना चाहिए (यदि अंतर्निहित डेटा रेंडर के बीच नहीं बदलता
तो कैशिंग उपयोग करें). फ़ंक्शन थ्रेड-सुरक्षित हैं यदि आपका callable है.
स्क्रिप्ट के साथ Rayforge चलाना
विंडो खुलने से पहले अपने फ़ंक्शन लोड करने के लिए --script ध्वज का उपयोग करें:
rayforge --script ~/.config/rayforge/my_functions.py mydoc.ryp
यह आपकी स्क्रिप्ट को स्टार्टअप के दौरान जल्दी चलाता है — ऐड-ऑन लोड होने से पहले और मुख्य विंडो बनने से पहले — इसलिए फ़ंक्शन स्केच के पहली बार हल होने पर उपलब्ध होता है.
टेक्स्ट बॉक्स में फ़ंक्शन का उपयोग करना
स्केचर में, निम्नलिखित के साथ एक टेक्स्ट बॉक्स बनाएँ:
{next_serial()}
फ़ॉर्मेट स्पेक भी काम करते हैं:
{next_serial():>20}
प्रोग्रामेटिक रूप से फ़ंक्शन पंजीकृत करना
यदि आप एक ऐड-ऑन या पुन: प्रयोज्य लाइब्रेरी लिख रहे हैं, तो आप स्केच हल होने से पहले चलने वाले किसी
भी Python कोड से register_template_function कॉल कर सकते हैं:
from sketcher.core.template_functions import register_template_function
register_template_function("part_number", lambda: f"P-{hash('x') % 10000:04d}")
अंतर्निहित फ़ंक्शन हटाए नहीं जा सकते
अंतर्निहित फ़ंक्शन (today, now, uuid आदि) अपंजीकृत नहीं किए जा सकते. यदि आपको उनका व्यवहार
बदलना है, तो भिन्न नाम वाला फ़ंक्शन पंजीकृत करें.