פרויקטים

OneWall — להריץ את אותה גיאומטריה פעמיים, ב-OpenSCAD ובדפדפן

העמדה: שכפול מימוש הוא בדרך כלל טעות. זה המקרה שבו עשיתי את זה בכוונה, ואני יכול להגיד לך בדיוק מה הוא קנה.

OneWall הוא מודל פרמטרי למכלים שמודפסים במצב vase — קיר רציף אחד, ברוחב פייה אחת. את הצורה שולטים כשלושים פרמטרים: שלושה מקטעי גובה, עקומת פרופיל אנכית, ארבע-עשרה טקסטורות קיר, חמישה חתכי שפה, וחריץ תווית אופציונלי. הפרמטרים משפיעים זה על זה. משנים את הפרופיל, והשפה שנראתה נכון כבר לא.

תהליך העבודה הכן על מודל כזה הוא לולאה: לשנות מספר, לרנדר, להסתכל, להחזיר. ב-OpenSCAD, F6 על מודל ברזולוציה הזו איטי מספיק כדי שתפסיק לחקור ותתחיל להתחייב לניחוש הראשון שלך. זה הכשל האמיתי — לא השניות, אלא החלטות התכן שלעולם אינך מקבל כי לנסות אותן יקר.

מה ניסיתי, ומה זה עלה

הפתרון היה להאיץ את הלולאה, והמקום היחיד שמהיר מספיק הוא הדפדפן. לכן אותה מתמטיקה גיאומטרית קיימת פעמיים: פעם ב-onewall.scad, ופעם ב-JavaScript שמניע את Three.js. כל שינוי פרמטר מחשב מחדש את הרשת בערך תוך 10–50 מילישניות — מתחת לסף שבו סליידר מפסיק להרגיש כמו פקודה ומתחיל להרגיש כמו ידית.

המחיר הוא בדיוק מה שהיית מנחש: שני מימושים שחייבים להסכים. אין מזה מוצא אלגנטי. כל מצב פרופיל, כל טקסטורה, כל סגנון שפה קיימים בשתי שפות, ושינוי באחד הוא באג בשני עד שהוא שינוי בשניהם. הסכמתי לזה בתנאי אחד — שלעולם לא תיווצר עמימות לגבי מי מהם צודק. קובץ ה-.scad הוא מקור האמת לכל דבר שמודפס. הדפדפן הוא דרך מהירה למצוא את הפרמטרים, לא דרך לייצר את החלק הסופי. הכלל הזה כתוב ב-README, בדף הכלי ובאזהרות הייצוא, כי מימוש משוכפל בלי סמכות מוצהרת הוא איך שמקבלים שני עצמים שונים במקצת ואחר צהריים ארוך.

המחיר השני הוא כנות בייצוא. ה-STL שיוצא מהתצוגה המקדימה הוא רשת, וזה בסדר — מדפסת רוצה רשת. ב-STEP זה נעשה לא נוח. הגיאומטריה בתצוגה היא רשת משולשים, ולכן ייצוא ה-STEP כותב כל משולש כפאה מישורית משלו. זה מוצק AP214 תקין, והוא נטען ב-Fusion, ב-SolidWorks או ב-FreeCAD כגוף — אבל כגוף, לא כעץ פיצ'רים, והקבצים גדולים: בערך 10MB למכל קטן, 30MB לגדול. יכולתי לשלוח את זה עם המילה "STEP" ולתת לאנשים לגלות את השאר. במקום זה המגבלה כתובה בדף של הכפתור עצמו. משתמש CAD שמייבא מוצק מפואט של 30MB בציפייה למודל שניתן לעריכה הוטעה, והוא יהיה צודק אם יגיד את זה.

החתימה היא אילוץ הדפסה, לא קישוט. בכל מכל מוטבע @Amitkuzi בעומק 0.2 מ"מ ברצפה. ב-OpenSCAD זה difference() אמיתי מול הגוף, ולכן התוצאה עדיין מוצק אחד ועדיין תואמת vase mode — חתימה ששוברת spiral mode היא חתימה שאף אחד לא משאיר. היא גם דורשת לפחות שתי שכבות תחתית, אחרת ההטבעה חודרת ונראית מתוך המכל. זה מתועד ליד ההגדרה ולא קבור, כי זה סוג הפרט שהופך לפתיל תמיכה.

הכלל, והגבול שלו

שכפל מימוש רק כששני העותקים משרתים אדונים שונים באמת, והכרע מי מהם מנצח לפני שאתה מתחיל. כאן אחד משרת נכונות והשני משרת זמן תגובה, והם אינם מתחרים כי שאלת הסמכות הוכרעה מראש.

מצב vase כופה גם אילוץ יפה: עם קיר ברוחב פייה אחת אי אפשר להוסיף חומר, ולכן הקשיחות חייבת לבוא מהצורה. טקסטורות מוצלבות — grid, fabric, diamond, knurl, ודפוסי סריג ה-kumiko — מתנהגות כמו צלעות מוצלבות. פרופיל barrel מוסיף חוזק היקפי. זו בעיה מבנית שנפתרת בגיאומטריה כי התהליך לא הותיר מנוף אחר, וזה תיאור הוגן של רוב ההנדסה המעניינת.

איפה זה נשבר

פרטים

מקור האמת
onewall.scad — OpenSCAD 2021.01+, מוכן ל-Customizer של MakerWorld, Printables ו-Thangs
תצוגה מקדימה בדפדפן
Three.js, OrbitControls, lil-gui, three-bvh-csg; פאנלים לפרמטרים, חומרים ותאורה; שמירה/טעינה של סשן כ-JSON
ייצוא
STL בינארי; STEP מפואט ISO-10303-21 AP214 דרך מייצא שנכתב במיוחד
רישיון
Apache-2.0 לקוד; CC BY 4.0 למודלים שאתה מייצר ממנו — CC BY נבחר בכוונה, דרישת הייחוס שלו אומרת שכל remix נושא את הקרדיט חזרה

לכלי OneWall → · מסמכים ושאלות נפוצות → · לקוד →