6 คะแนน โดย GN⁺ 2025-12-22 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • กรณีศึกษาการสำรวจแนวคิดพื้นฐานของ CAD แบบเขียนโค้ด โดยใช้ OpenSCAD ออกแบบ ที่ใส่แบตเตอรี่ แบบง่าย ๆ
  • ก่อนหน้านี้ผู้เขียนเคยสร้างกล่องแบบพารามิเตอร์สำหรับแบตเตอรี่ AA·AAA ด้วย Autodesk Fusion และนำมา ทำใหม่ด้วย OpenSCAD เพื่อใช้เรียนรู้
  • ในโค้ดสามารถเปลี่ยนตัวแปรอย่าง numRows, numColumns, batteryType เพื่อสร้าง ที่ใส่แบบปรับแต่งได้ และ ได้ผลลัพธ์แบบเดียวกันโดยไม่ต้องใช้ซอฟต์แวร์ CAD ราคาแพง
  • ใช้ difference() และ translate() ในโครงสร้างที่ สร้างและลบกล่องกับช่องซ้ำ ๆ ซึ่งเป็นแนวทางการออกแบบที่เรียบง่ายแต่มีประสิทธิภาพ
  • แม้จะมีข้อจำกัดกับโมเดลที่ซับซ้อน แต่ก็ถูกมองว่าเป็นเครื่องมือที่ มีประโยชน์สำหรับการทำชิ้นงานเรขาคณิตแบบง่าย เช่น spacer และ bearing drift

ออกแบบที่ใส่แบตเตอรี่ด้วย OpenSCAD

  • หลังจากออกแบบ ตัวจัดเก็บแบบกล่องพื้นฐาน สำหรับแบตเตอรี่ AA และ AAA ใน Autodesk Fusion แล้ว ผู้เขียนก็นำมาสร้างใหม่ใน OpenSCAD
    • โมเดล Fusion เดิมเป็น โครงสร้างแบบพารามิเตอร์ ที่ปรับขนาดแบตเตอรี่ จำนวนแถว และจำนวนคอลัมน์ได้ผ่านการเปลี่ยนตัวแปร
    • โมเดลที่เสร็จแล้วถูกอัปโหลดไปยัง Printables
  • OpenSCAD เป็น เครื่องมือ CAD ที่สร้างวัตถุ 3 มิติด้วยการเขียนโค้ด เหมาะกับการเรียนรู้โมเดลที่มีโครงสร้างไม่ซับซ้อน
    • ผู้เขียนอ้างอิงบางส่วนจากบทสอน OpenSCAD และลองทำอยู่ประมาณหนึ่งชั่วโมง
    • ผลลัพธ์ถูกเผยแพร่เป็นไฟล์ battery_holder_generator.scad

โครงสร้างโค้ดและวิธีการทำงาน

  • มีการกำหนดตัวแปรหลัก เช่น AA, AAA, heightCompartment, thicknessWall, numRows, numColumns, batteryType
    • widthBox, lengthBox, depthBox ถูกคำนวณจากการผสมกันของตัวแปรเหล่านี้
  • ใช้ฟังก์ชัน difference() เพื่อสร้าง กล่องพื้นฐาน (cube) ก่อน แล้วค่อย ลบช่องใส่แบตเตอรี่ออกซ้ำ ๆ ภายใน
    • ใช้ลูป for และ translate() ในการคำนวณตำแหน่งของช่อง และใช้ cube() สร้างแต่ละช่อง
    • ผู้เขียนบอกว่าส่วนที่ต้องใช้ let() เพื่อกำหนด startColumn, startRow ภายในลูปนั้นค่อนข้างชวนสับสน

เปรียบเทียบ OpenSCAD กับ Fusion

  • สร้างโมเดลเดียวกันใน Fusion และ OpenSCAD แล้วนำไปเปรียบเทียบใน slicer
    • สุดท้ายแล้วชิ้นงานที่ได้แทบไม่ต่างกัน และ OpenSCAD ทำให้แก้ไขได้รวดเร็วด้วย แนวทางแบบเบา ๆ ที่ใช้โค้ดเป็นหลัก
    • สามารถได้ผลลัพธ์ระดับเดียวกันโดยไม่ต้องใช้ซอฟต์แวร์ CAD ราคาแพง

ศักยภาพการใช้งานและข้อจำกัด

  • แม้จะไม่เหมาะกับงานออกแบบที่ซับซ้อน แต่ มีประโยชน์มากสำหรับการสร้างชิ้นงานเรขาคณิตแบบง่าย เช่น spacer และ bearing drift
    • เด่นในเรื่อง การทำงานอัตโนมัติสำหรับการสร้างชิ้นส่วนง่าย ๆ ที่จำเป็นในชีวิตประจำวัน
  • แนวทางการออกแบบแบบ ยึดโค้ดเป็นศูนย์กลาง ของ OpenSCAD มีประสิทธิภาพกับการสร้างโครงสร้างที่ซ้ำกันและมีรูปแบบสม่ำเสมอ

บทสรุป

  • OpenSCAD ถูกประเมินว่าเป็น เครื่องมือ CAD แบบเขียนโค้ดที่สามารถสร้างโมเดล 3 มิติแบบง่ายได้อย่างรวดเร็ว
    • ผู้เขียนอธิบายว่า “มันก็แค่วาดกล่องแล้วเจาะรู แต่ก็ค่อนข้างเจ๋งทีเดียว”
    • สำหรับงานออกแบบง่าย ๆ ในอนาคต OpenSCAD อาจใช้งานได้จริงมากกว่า Fusion

2 ความคิดเห็น

 
ahwjdekf 2025-12-22

ผมขอแนะนำ FreeCAD อย่างมาก

 
GN⁺ 2025-12-22
ความเห็นจาก Hacker News
  • OpenSCAD เป็นเครื่องมือ CAD ที่เข้ากับ แนวคิดแบบโปรแกรมเมอร์ มาก
    องค์ประกอบทุกอย่างสามารถ ทำให้เป็นพารามิเตอร์ได้ จึงเอาโปรเจ็กต์ enclosure ที่ทำไว้ครั้งหนึ่งมาปรับตัวแปรไม่กี่ตัวแล้วสร้างได้หลายเวอร์ชัน
    ถ้าตั้งค่า backend Manifold ใน nightly build รุ่นล่าสุด ความเร็วในการเรนเดอร์จะลดจากระดับเป็นนาทีเหลือเพียงไม่กี่วินาที
    รุ่นทางการปี 2021 เก่าเกินไปจนใช้งานลำบาก
    ไลบรารี BOSL2 เพิ่มความสามารถอย่าง fillet, rounding และ attachment ทำให้ OpenSCAD จากที่ดูเหมือนของเล่นกลายเป็นเครื่องมือออกแบบที่ใช้งานจริงได้
    มันยังเป็นมิตรกับ Git มาก โดยเปรียบเทียบการเปลี่ยนแปลงในไฟล์ .scad ได้ง่ายกว่าไฟล์ไบนารีของ Fusion 360 มาก

  • เพราะรู้สึกถึงข้อจำกัดของ OpenSCAD จึงลงมือสร้างไลบรารีสร้าง 3D mesh แบบอิง SDF (signed distance function) ด้วย Python ชื่อ sdf เอง
    สามารถใช้ตรรกะที่ยืดหยุ่นของ Python ในการประกอบโมเดล และนำ 3D mesh ที่มีอยู่แล้วเข้ามาทำงานอย่าง กร่อน, ขยาย, ตัด, ทำให้กลวง ได้
    โปรเจ็กต์นี้ยังมีสิ่งที่ต้องทำอีกมาก แต่คิดว่าสนใจด้านนี้มาก

    • อยากรู้ว่ามันต่างจากเครื่องมือโมเดลลิงบน Python ตัวอื่นอย่าง Build123d หรือ CadQuery อย่างไร
      STL เก็บพิกัดสามเหลี่ยมเหมือน bitmap แต่ STEP เก็บคำสั่งสร้างโมเดลเหมือน vector art
      GUI CAD ส่วนใหญ่ใช้ STEP เป็นพื้นฐาน จึงเข้ากันได้ดี
      ถ้า SDF สร้างได้แค่ STL พอมองเรื่องความเข้ากันได้กับ GUI CAD แล้ว อาจจะเรียน Build123d หรือ CadQuery จะดีกว่าหรือไม่
      Build123d ใช้แนวคิดแบบสเก็ตช์ 2D แล้วแปลงเป็น 3D เหมือน Fusion360 หรือ FreeCAD จึงสะดวกเวลาสลับไปมาระหว่าง GUI กับ CAD แบบเขียนโค้ด
    • คาดหวังว่าไลบรารีนี้อาจช่วยแก้ปัญหา tapered variable pitch helix ได้
    • PythonSCAD ก็รองรับ SDF ผ่าน libfive เช่นกัน — ดูได้โดยค้นหา “sdf” แถวกลางหน้า ตัวอย่าง
    • สิ่งที่น่าประทับใจเป็นพิเศษคือสามารถทำ blending สไตล์ metaball (blobby) ได้ง่าย
    • ฟังก์ชันนำเข้าไฟล์ STL เดิมมาเจาะรูหรือรวมกับอ็อบเจ็กต์อื่นน่าสนใจมาก
      เครื่องมืออย่าง Meshlab ให้ข้อความผิดพลาดที่เข้าใจยากจนทำไม่สำเร็จ แต่วิธีนี้ดูจะใช้งานได้ตรงไปตรงมามากกว่า
  • เพิ่งเริ่มใช้ OpenSCAD ไม่นานนี้ แต่ในขณะที่ CAD ส่วนใหญ่บังคับให้ต้องเรียนฟีเจอร์มากมาย OpenSCAD อธิบายได้ด้วย ชีตสรุป A4 แผ่นเดียว
    ถ้าใช้เวอร์ชัน git master แทนรุ่นปี 2021 จะได้ทั้งความเร็วที่ดีกว่าและฟีเจอร์ใหม่กว่า
    เมื่อใช้ไลบรารี BOSL2 ก็ไม่ต้องลงมือทำฟีเจอร์ซับซ้อนแบบ CAD ดั้งเดิมเอง และยังสนุกกับการเปิดดู implementation ภายในเพื่อเรียนรู้ได้

    • ฉันก็ได้ความแม่นยำในการออกแบบสำหรับ 3D printing จาก OpenSCAD เช่นกัน
      ใน GUI CAD แค่แก้ 0.25mm ก็ต้องกลับไปปรับรูและ cutout ทั้งหมดใหม่จนน่าหงุดหงิด แต่แนวทางแบบเขียนโค้ดช่วยเลี่ยงปัญหานั้นได้
      ค่าเริ่มต้นแบบ center origin ของ BOSL2 ทำให้การ transform ง่ายขึ้นมาก
    • เวอร์ชัน git master เรนเดอร์เร็วกว่าเวอร์ชันเก่า หลายสิบเท่า
    • มีการขอลิงก์ชีตสรุป
    • แต่ก็ยังมีข้อจำกัดที่งานอย่าง การลบมุมคม ยังทำได้ยาก
    • BOSL2 เป็นไลบรารีที่ทรงพลังและมีประโยชน์มากจริง ๆ
  • น่าเสียดายที่ OpenSCAD ไม่มี แนวคิดเรื่องอ็อบเจ็กต์ ทำให้เข้าถึงแบบ box1.width ไม่ได้
    เคยลองใช้ Build123d แต่มีบั๊กเยอะและเอกสารยังไม่ดีนัก หวังว่าสักวันจะดีขึ้น

  • ข้อดีของ OpenSCAD คือทำโมเดลได้ง่ายด้วยการ ประกอบกันทางคณิตศาสตร์ ของทรงกลม ทรงกระบอก และลูกบาศก์
    ข้อเสียคือขีดจำกัดในการโมเดลก็มาจากความสามารถในการประกอบเชิงคณิตศาสตร์นั้นเอง
    ฟอร์ก PythonSCAD ที่รองรับ Python มีกำหนดจะถูกรวมเข้าไปในรีลีสหลักในไม่ช้า

    • OpenSCAD อิงพิกัดแบบสัมบูรณ์ จึงแสดง การจัดวางแบบสัมพัทธ์ หรือความสัมพันธ์ระหว่าง solid ได้ยาก
      ถ้าจะสร้างโมเดลอย่างน็อตหรือโบลต์ ต้องสร้างแต่ละส่วนแยกกันแล้วเอามาซ้อนทับ
      ถ้าต้องจัดแนวกับชิ้นส่วนจริงก็ต้องคำนวณด้วยมือเยอะ และมิติที่ hard-code ไว้ก็แก้ไขยาก
      renderer ในเวอร์ชันเบต้าล่าสุดเร็วขึ้นมาก จึงควรลองใช้จริง
    • OpenSCAD ยังมี hull และ minkowski sum ด้วย ถ้าฝึกใช้จะเป็นเครื่องมือที่ทรงพลัง
    • ยังมีเวอร์ชัน JavaScript ที่รันในเบราว์เซอร์ได้ชื่อ OpenJSCAD
      ดู GitHub repository ได้
    • ขอแนะนำ Bowler Studio ที่พัฒนาด้วย Java เช่นกัน มี รองรับ Clojure และมีฟีเจอร์จำลองฟิสิกส์ในตัว
    • ยังสามารถกำหนดพิกัดจุดเองเพื่อสร้างรูปทรงซับซ้อนได้ แต่ลำดับนั้นจุกจิกจนให้ความรู้สึกเหมือน แบบทดสอบ MENSA
  • ฉันชอบความเรียบง่ายของ OpenSCAD ในฐานะ 3D modeler แบบเบา ๆ
    แทนที่จะใช้ GUI CAD ขนาดใหญ่ ก็สามารถสร้างโมเดลด้วยแค่รูปทรงพื้นฐานและการ transform แบบเดียวกับ กราฟิกโปรแกรมมิง
    ต่อให้กลับมาเปิดโค้ดอีกครั้งหลังเวลาผ่านไปนาน แค่อ่านไม่กี่บรรทัดก็เข้าใจได้ทันที

    • เมื่อก่อนใช้ OpenSCAD เยอะ แต่พอใช้งานจริงกลับรู้สึกว่า CAD แบบดั้งเดิมมัก ตรงไปตรงมากว่า
      constraint ที่ต้องคำนวณทางคณิตศาสตร์นั้น ใช้ฟีเจอร์สเก็ตช์ของ GUI CAD ง่ายกว่ามาก
      CAD สามารถย้อนดูโครงสร้างทีละขั้นได้ จึงไม่จำเป็นต้องมานั่งตีความสคริปต์
  • OpenSCAD สามารถใช้ editor ภายนอกแทน editor ของตัวเองได้
    เมื่อบันทึกจาก editor ภายนอก preview จะรีเฟรชอัตโนมัติ
    คู่มือตั้งค่า external editor

  • เคยเขียนบทสอน “10 แนวคิดสำคัญ” สำหรับเริ่มต้น OpenSCAD ไว้ก่อนหน้านี้
    ลิงก์บทสอน

  • เคล็ดลับ: สามารถตั้งตัวแปร $fn เพื่อ ปรับความละเอียด ได้
    $fn = $preview ? 32 : 64;

    • แต่ถ้าส่งออกไปใช้กับการวิเคราะห์ FEM การตั้งค่า $fn สูงเกินไปอาจทำให้ ประสิทธิภาพของ mesh แย่ลง
      เพราะความแม่นยำของการวิเคราะห์สำคัญกว่าความลื่นตาทางภาพ ค่าประมาณ 32~64 จึงเหมาะสม
  • ในทางปฏิบัติ ถ้าจะสร้างโมเดลที่ใช้งานได้จริงต้องลงแรงพอสมควร แต่เสน่ห์ของมันอยู่ที่สามารถแทนโมเดลแบบพาราเมตริกที่สมบูรณ์ได้ด้วย ไฟล์ข้อความขนาด 2KB
    Git diff ก็ใช้งานได้อย่างมีความหมาย และยังปรับโมเดลผ่านแผง customizer ได้เหมือนแอป
    มีประสิทธิภาพกว่าไฟล์ XML ขนาดใหญ่ของ FreeCAD มาก

    • ฉันมักจะทำงานประเภท แก้หรือดัดแปลงชิ้นส่วนเดี่ยว บ่อย ๆ และเมื่อใช้ Python งานซ้ำลักษณะนี้ก็ง่ายขึ้นมาก
    • สำหรับฉัน การอธิบายโมเดลด้วยคณิตศาสตร์เป็นธรรมชาติกว่า
      แต่การที่ไม่มีฟีเจอร์อย่าง chamfer หรือ rounding มาให้ในตัว จนต้องไปทำด้วยการคำนวณ minkowski โดยใช้ cone หรือ sphere นั้นก็ค่อนข้างยุ่งยาก