2 คะแนน โดย GN⁺ 2025-11-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • µcad คือ ภาษาโปรแกรมสำหรับ CAD แบบโอเพนซอร์ส ที่พัฒนาด้วย Rust และเป็น ระบบเรขาคณิตแบบข้อความ ที่กำหนดสเก็ตช์ 2D และวัตถุ 3D ด้วยโค้ด แล้วส่งออกเป็น STL·SVG ได้
  • หัวใจของภาษานี้คือ วัตถุเรขาคณิตเชิงพารามิเตอร์ โดยใช้การดำเนินการแบบบูลีนเพื่อประกอบรูปทรงพื้นฐานให้เป็นรูปทรงซับซ้อน และเรนเดอร์เป็นรูปแบบสำหรับงานพิมพ์ 3D·การกัด CNC
  • ใช้ ระบบชนิดข้อมูลแบบสแตติกและลิเทอรัล Quantity ที่อิงหน่วย เพื่อกำหนดโมเดลด้วยค่าอย่าง 50mm, 10°, 50% และมีระบบชนิดข้อมูลที่ใช้ประกอบโครงสร้างต้นไม้ของโมเดลเรขาคณิตด้วยชนิด Models
  • ผ่านฟีเจอร์อย่างโมดูล·ฟังก์ชัน·เวิร์กเบนช์ part·คำสั่ง use, ไลบรารีมาตรฐานอย่าง std::geo2d·std::geo3d และความสามารถ std::import สำหรับนำเข้าข้อมูล TOML จึงสามารถสร้าง โค้ดออกแบบที่นำกลับมาใช้ซ้ำได้และการทำโมเดลแบบขับเคลื่อนด้วยข้อมูล
  • เป็นโครงการที่ผู้ใช้ซึ่งต้องการเวิร์กโฟลว์ CAD แบบโปรแกรมมิงสามารถใช้อ้างอิงได้ โดยมีตัวอย่าง·เอกสาร·สื่อไลฟ์โค้ดดิ้งให้พร้อม

ภาพรวมของ µcad

  • µcad คือ ภาษาโปรแกรม CAD แบบโอเพนซอร์ส สำหรับกำหนดและสร้างสเก็ตช์ 2D และวัตถุ 3D ด้วยโค้ด
    • แนวคิดหลักคือ การทำโมเดลเรขาคณิตเชิงพารามิเตอร์
  • สามารถนำรูปทรงพื้นฐานมาประกอบเป็นรูปทรงซับซ้อน และเรนเดอร์ผลลัพธ์เป็น STL·SVG เพื่อนำไปใช้กับงานพิมพ์ 3D หรือการทำงาน CNC ได้

การออกแบบภาษาและวิธีการทำโมเดล

  • µcad เป็น ภาษาสำหรับการทำโมเดลเชิงพารามิเตอร์ ที่จัดโครงสร้างโมเดลโดยยึดนิยามทางเรขาคณิตที่มีพารามิเตอร์เป็นศูนย์กลาง
    • รูปทรงถูกประกาศด้วยโค้ด และสามารถสร้างรูปแบบแปรผันได้หลากหลายเพียงเปลี่ยนพารามิเตอร์
  • ใช้การผสมแบบบูลีนของ Sphere, Cube, Cylinder เป็นต้น และสร้างรูปทรง 3D ผ่านการหมุน (revolve)·การจัดเรียง·การแปลง
  • มีตัวอย่างอย่าง CsgCube·Spirograph·Gears·Dome ที่แสดงแพตเทิร์นการทำโมเดลหลากหลาย เช่น การสร้าง 3D จากสเก็ตช์ 2D, การสร้างโครงสร้างซ้ำ, โปรไฟล์เฟือง เป็นต้น

ระบบชนิดข้อมูลและลิเทอรัลหน่วย

  • µcad ใช้ระบบชนิดข้อมูลแบบสแตติก และตัวแปรทำงานแบบไม่เปลี่ยนแปลงค่า
  • ผ่านชนิด Quantity จึงสามารถใช้หน่วยอย่าง mm, °, % ได้โดยตรงในการประกอบโมเดล
    • สามารถใช้รูปแบบอย่าง 10°·4m²·50% เป็นพารามิเตอร์ของโมเดลได้ตามนั้นเลย
  • ชนิด Models เป็นโครงสร้างสำหรับแสดงต้นไม้ของโมเดลเรขาคณิต โดยเก็บโครงสร้างโหนดของโมเดล CAD แบบโค้ด

ระบบโมดูลและไลบรารีมาตรฐาน

  • ใช้ mod, use, fn, part ฯลฯ เพื่อจัดโครงสร้างโมดูล แยกงานออกแบบขนาดใหญ่ออกเป็นหลายหน่วยโค้ด
  • ไลบรารีมาตรฐานอย่าง std::geo2d, std::geo3d, std::math, std::ops รองรับการคำนวณเรขาคณิต·คณิตศาสตร์·เมทริกซ์·การประกอบสเก็ตช์
  • part ใช้เป็นหน่วยสำหรับสร้างและแปลงสเก็ตช์·พาร์ต 3D

การนำเข้าข้อมูลและการดีบัก

  • ใช้ std::import เพื่อนำเข้าพารามิเตอร์จากไฟล์ TOML มาใช้กับโมเดล
    • เป็นวิธีที่ช่วยใส่สเปกของชิ้นส่วนสำเร็จรูปเข้าไปในโมเดลได้อย่างง่ายดาย
  • สามารถตรวจสอบค่าที่นำเข้าได้ด้วย std::debug::assert_eq เป็นต้น

ทูลเชนและการติดตั้ง

  • ใช้เครื่องมือ CLI บน Rust ชื่อ microcad-cli สำหรับรันและเรนเดอร์โมเดล
    • ติดตั้งด้วย cargo install microcad-cli
    • ขณะนี้ยังอยู่ในช่วงอัลฟาและมีการเพิ่มฟีเจอร์อย่างต่อเนื่อง
  • สามารถดูผลการเรนเดอร์แบบภาพได้ผ่าน microcad-viewer
  • รีโพซิทอรีพัฒนาบน codeberg.org และเผยแพร่ผ่าน crates.io

ตัวอย่างและสื่อไลฟ์โค้ดดิ้ง

  • มีการเผยแพร่ตัวอย่างหลากหลาย เช่น Spirograph, Lego Bricks, Gears, Dome บนบล็อกทางการ
    • นำเสนอกรณีใช้งาน CAD แบบโปรแกรมมิง เช่น การสร้างโปรไฟล์เฟือง, การทำโมเดลสไปโรกราฟ, การสร้างโครงสร้างโดม
  • ทุกตัวอย่างมาพร้อมโค้ดและวิดีโอไลฟ์โค้ดดิ้ง ทำให้เรียนรู้วิธีใช้ภาษาได้แบบเป็นขั้นเป็นตอน

สถานะของโครงการ

  • โครงการยังอยู่ในระยะเริ่มต้นและกำลังขยายความสามารถต่อเนื่อง
  • กำลังจัดระบบเอกสารของภาษาทั้งหมดผ่านงานเอกสาร “The µcad book”

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

 
GN⁺ 2025-11-25
ความคิดเห็นจาก Hacker News
  • ควรลบการกล่าวถึง LEGO ออกจากเว็บไซต์และตัวอย่าง
    LEGO เข้มงวดมากเรื่อง การคุ้มครองเครื่องหมายการค้า และไม่ต้องการให้บุคคลที่สามใช้ชื่อนี้
    เพราะกังวลว่าแบรนด์จะกลายเป็นชื่อสามัญและเสี่ยงต่อการสูญเสียสิทธิในเครื่องหมายการค้า
    บทความที่เกี่ยวข้อง: "Lego sues Dutch firm over anti-terror blocks using name and shape" (ลิงก์ archive)

  • น่าจะดีถ้าหน้าแรกของเว็บไซต์แสดง ตัวอย่างโค้ดสั้นๆ และสเก็ตช์ที่สร้างขึ้น ให้เห็นทันที

  • ฉันเคยใช้ zoo และภาษา KCL ของมันเพื่อเขียน CAD แบบอิง boundary representation (BREP)
    ดูเหมือนว่า µcad ก็มีเป้าหมายเดียวกัน
    โดยส่วนตัวฉันชอบ แนวทางแบบ pipeline ของ KCL มากกว่า
    แต่สิ่งที่ไม่ชอบคือ zoo บังคับให้ใช้เคอร์เนลแบบคลาวด์เท่านั้น ทำให้เกิด vendor lock-in สูง
    ยังไม่ชัดเจนว่า µcad แก้ปัญหานี้อย่างไร

  • จุดที่ดีที่สุดของ OpenSCAD คือพอบันทึกโค้ดแล้วสามารถ ดูผลลัพธ์ใน 3D view ได้ทันที
    เลยสงสัยว่า ucad จะรองรับเวิร์กโฟลว์ที่มีความฉับไวแบบนี้ได้หรือไม่

    • ความฉับไวนี้เกิดจาก OpenCSG ที่ใช้ stencil buffer ของ GPU (opencsg.org)
      เป็นวิธีวาดลงบนหน้าจอ 2D อย่างรวดเร็วโดยไม่ต้องคำนวณจุดตัด 3D จริง
      OpenSCAD ทำ abstraction โครงสร้างนี้ด้วย AST เพื่อส่งต่อไปยังเอนจินได้หลากหลาย เช่น OpenCSG, CGAL, Manifold เป็นต้น
      ในทางทฤษฎี CAD อะไรก็ทำได้ แต่การลงมือทำจริงยากมาก
    • ดูเหมือนจะมีปลั๊กอินสำหรับพรีวิวใน VS Code (เอกสารที่เกี่ยวข้อง)
    • กำลังพัฒนาฟีเจอร์ viewer/preview แยกต่างหาก และบอกว่าได้รับ การสนับสนุนจาก Prototype Fund
  • เคยใช้ทั้ง OpenSCAD และ CadQuery แต่รู้สึกไม่สะดวกเพราะ ข้อจำกัดของ UI และเคอร์เนล
    เมื่อเทียบกับ Onshape หรือ Fusion 360 แล้วฟีเจอร์ยังน้อยกว่า
    FreeCAD พัฒนาไปมากแล้ว แต่สำหรับผู้ใช้ระดับต้นถึงกลางก็ยังใช้งานยากอยู่
    หวังว่าสักวันโอเพนซอร์ส CAD จะกลายเป็นทางเลือกที่ดีได้จริง

    • ข้อดีของ OpenSCAD คือสามารถ ทำโมเดลแบบเขียนโปรแกรมได้ และข้อเสียคือจำเป็นต้องคิดเชิงคณิตศาสตร์พอสมควร
      ยังมีโปรเจกต์อย่าง Fornjot ที่กำลังลองใช้เคอร์เนลแบบใหม่
    • ถ้าต้องการเครื่องมือแบบ GUI ขอแนะนำ SolveSpace หรือ Dune3D
    • UI ใหม่ของ FreeCAD และเวอร์ชันที่รวม OpenSCAD ก็ใช้ได้ดีพอสมควร
    • แต่ในมุมของคนที่ใช้มาตั้งแต่ปี 2020 ก็ยังรู้สึกว่า ปัญหาพื้นฐานยังเหมือนเดิม แค่ตัวเรนเดอร์ดูดีขึ้นเท่านั้น
  • โปรเจกต์นี้ไม่มี constraint solver หรืออย่างน้อยก็ยังไม่มีการบันทึกแผนเรื่องนี้ไว้ในเอกสาร
    ฉันไม่อยากต้องคอยรักษาสมการตรีโกณมิติเองทั้งหมดเพื่อทำ constraint ง่ายๆ

  • น่าเสียดายที่ไม่มีเวอร์ชันที่รันได้ทันทีใน สภาพแวดล้อมแบบเว็บโน้ตบุ๊ก เหมือน บทช่วยสอน Lego brick
    ถ้ามีรูปแบบที่ลองเล่นได้โดยไม่ต้องติดตั้งแบบ SCAD crash course ของ MachineBlocks ก็คงดี

  • สงสัยว่านี่ใกล้เคียงกับการเป็น ตัวแทน AutoCAD หรือไม่
    และอยากรู้ด้วยว่ามี ความเข้ากันได้ของฟอร์แมตไฟล์ สำหรับนำเข้าไปใช้กับ Revit เป็นต้นหรือเปล่า

  • เป็นโปรเจกต์ที่น่าสนใจมาก
    สำหรับโปรแกรมเมอร์ที่ไม่ชอบทำ CAD ด้วยมือแบบฉัน แนวทางนี้ เป็นธรรมชาติกว่า มาก
    แต่พอดูตัวอย่าง gear แล้ว รู้สึกว่าถ้าจะเข้าใจ primitive พื้นฐานของไลบรารี คงต้องอ่านเอกสารละเอียดพอสมควร
    ถ้าชุมชนใหญ่ขึ้นก็น่าจะมีรูปทรงให้ใช้เพิ่มอีกมาก

  • กำลังมองหาภาษา CAD ที่รองรับการทำซ้ำ (iteration) ได้ดีอยู่พอดี
    ตอนออกแบบบ้านของตัวเอง ฉันเคยคิดว่าถ้าทำรายละเอียดการสร้างผนังให้เป็นอัตโนมัติด้วย โค้ดแบบลูป ได้ก็คงดี
    แต่ถ้าไม่มี for loop งานแบบนี้ก็ยากเกินไป เลยสุดท้ายต้องล้มเลิก

    • FreeCAD มีความสามารถด้าน BIM (Building Information Modeling) จึงเหมาะกับงานออกแบบสถาปัตยกรรม
    • ถ้าต้องการโครงสร้างแบบทำซ้ำ build123d อาจเหมาะกว่า