מדריך: יצירת תוספים עבור FreeCAD
מטרת השיעור: ללמוד ליצור גופים מוצקים (תיבות, גלילים) באמצעות פייתון, להבין את מבנה המסמך ב-FreeCAD, וליצור תוסף שיוצר רכיב פרמטרי.
חלק 1. כיצד בנוי מסמך ב-FreeCAD?
לפני יצירת אובייקטים, חשוב להבין את ההיררכיה ב-FreeCAD:
- מסמך – קובץ פתוח (.FCStd). כל מה שאתה יוצר נמצא בתוך מסמך זה.
- אובייקט – אובייקט פרמטרי: תיבה, גליל, סקיצה וכו'.
- צורה – גוף גאומטרי (B-Rep) שניתן להציגו ויזואלית.
אתה תמיד עובד בהקשר של המסמך הפעיל.
איך להשיג את המסמך הנוכחי?
doc = FreeCAD.ActiveDocument
אם אין מסמך – צור חדש:
doc = FreeCAD.newDocument("התכנון_שלי")
חלק 2. יצירת תיבה באמצעות פייתון
האובייקט התלת-ממדי הפשוט ביותר ב-FreeCAD הוא Part::Box.
דוגמה לקוד:
doc = FreeCAD.ActiveDocument or FreeCAD.newDocument()
box = doc.addObject("Part::Box", "התיבה_שלי")
box.Length = 20.0
box.Width = 10.0
box.Height = 5.0
doc.recompute()
מה קורה כאן?
doc.addObject("Part::Box", "התיבה_שלי")
→ יוצר אובייקט חדש מסוג "תיבה" בשם "התיבה_שלי".- לאובייקט יש מאפיינים פרמטריים:
Length,Width,Height. doc.recompute()→ בונה מחדש את המודל (חובה לאחר שינוי פרמטרים!).
כל המידות ניתנות במילימטרים כברירת מחדל ב-FreeCAD.
חלק 3. תוסף: "תיבה פרמטרית"
כעת ניצור תוסף שיוצר תיבה עם ממדים מוגדרים.
שלב 1. יצירת תיקייה
.../Mod/ParamBoxAddon/
שלב 2. קובץ InitGui.py
# InitGui.py
import FreeCADGui
from ParamBoxAddon.param_box_workbench import ParamBoxWorkbench
FreeCADGui.addWorkbench(ParamBoxWorkbench())
שלב 3. קובץ param_box_workbench.py
# param_box_workbench.py
import FreeCAD, FreeCADGui
class CreateBoxCommand:
def GetResources(self):
return {
"MenuText": "צור תיבה",
"ToolTip": "צור תיבה פרמטרית בגודל ברירת מחדל"
}
def Activated(self):
# קבל או צור מסמך
doc = FreeCAD.ActiveDocument
if not doc:
doc = FreeCAD.newDocument("תכנון_תיבות")
# יצירת אובייקט תיבה
box = doc.addObject("Part::Box", "התיבה_הפרמטרית_שלי")
box.Length = 30.0
box.Width = 20.0
box.Height = 10.0
# חישוב מחדש הוא חובה!
doc.recompute()
# אופציונלי: בחירת האובייקט
FreeCADGui.Selection.clearSelection()
FreeCADGui.Selection.addSelection(box)
def IsActive(self):
return True
class ParamBoxWorkbench(FreeCADGui.Workbench):
MenuText = "תיבה פרמטרית"
ToolTip = "צור תיבה פרמטרית פשוטה"
def Initialize(self):
self.list = ["CreateBoxCommand"]
self.appendToolbar("כלי תיבות", self.list)
self.appendMenu("תיבה פרמטרית", self.list)
def GetClassName(self):
return "Gui::PythonWorkbench"
FreeCADGui.addCommand("CreateBoxCommand", CreateBoxCommand())
שלב 4. בדיקת תפקוד
- שמור את הקבצים
- הפעל מחדש את FreeCAD
- בחר את סביבת העבודה "תיבה פרמטרית"
- לחץ על הכפתור "צור תיבה"
תיבה אפורה אמורה להופיע בחלון התלת-ממדי.
בדוק את הפרמטריות!
- בעץ המודל ("Model"), לחץ כפליים על
התיבה_הפרמטרית_שלי - בחלונית הנתונים, שנה למשל את
Lengthל-50 - הקש Enter → המודל יתעדכן אוטומטית!
זהו דגם פרמטרי.
חלק 4. אובייקטים בסיסיים נוספים
ניתן ליצור יותר מתיבות בלבד. הנה כמה דוגמאות:
גליל
cyl = doc.addObject("Part::Cylinder", "הגליל_שלי")
cyl.Radius = 10.0
cyl.Height = 25.0
כדור
sphere = doc.addObject("Part::Sphere", "הכדור_שלי")
sphere.Radius = 15.0
חרוט
cone = doc.addObject("Part::Cone", "החרוט_שלי")
cone.Radius1 = 10.0 # רדיוס תחתון
cone.Radius2 = 5.0 # רדיוס עליון
cone.Height = 20.0
כל האובייקטים האלה נמצאים במודול Part, שהוא מובנה ב-FreeCAD.
משימה מעשית
- שנה את התוסף כך שיצור גליל במקום תיבה.
- ודא שביצירת אובייקט הוא מקבל שם ייחודי (למשל
תיבה_1,תיבה_2…) אם כבר קיים אובייקט בשם זה. - הוסף פקודה נוספת – "צור גליל" – לאותה סביבת עבודה.
רמז לשם ייחודי:
base_name = "התיבה_שלי"
index = 1
name = base_name
while name in [obj.Name for obj in doc.Objects]:
name = f"{base_name}_{index}"
index += 1
box = doc.addObject("Part::Box", name)
טיפים לניפוי באגים
- קרא תמיד ל-
doc.recompute()לאחר שינוי פרמטרים. - השתמש ב-
FreeCAD.Console.PrintMessage("טקסט\n")לניפוי (הודעות יופיעו בתצוגת הדוחות). - בדוק אם קיים מסמך לפני שאתה עובד עליו.
מה הלאה?
בשיעור 4 נלמד:
- ליצור ממשק משתמש גרפי (GUI) עם שדות קלט
- לבנות חלון שבו המשתמש מזין אורך, רוחב וגובה
- וללחוץ על כפתור כדי לבנות תיבה עם הפרמטרים הללו
כבר נקבל כלי אמיתי – לא רק הדגמה!