ตรวจลำดับพาธ AxiDraw ก่อนวาด SVG
เปรียบเทียบการแสดงตัวอย่าง SVG ออฟไลน์ของ AxiDraw เพื่อตรวจสอบลำดับเส้นทาง การกลับตัว และการเคลื่อนไหวด้วยปากกาที่ยกขึ้นจากกระดาษ รักษารูปทรงเรขาคณิตของการวาดและทำความเข้าใจว่า SVG ที่บันทึกไว้คืออะไร
ในหน้านี้
หากต้องการเพิ่มประสิทธิภาพการเคลื่อนที่ของปากกา SVG ใน AxiDraw ขั้นแรกให้ยืนยันว่าเส้นทางวาดเครื่องหมายที่คุณต้องการ จากนั้นเปรียบเทียบการแสดงตัวอย่างแบบออฟไลน์กับรูปทรงเดียวกันและการตั้งค่าคงที่ การจัดลำดับใหม่อาจทำให้การเคลื่อนไหวของปากกาสั้นลงเมื่อยกปากกาขึ้น โดยไม่ลดจำนวนการยกหรือเปลี่ยนรูปร่างที่วาด
เก็บ SVG ดั้งเดิมของคุณไว้ การแสดงตัวอย่างด้านล่างจะตรวจสอบการเรียงลำดับและการกลับเส้นทางทางเลือก มันไม่สร้างเส้นกึ่งกลางขึ้นมาใหม่ ซ่อมแซมโครงร่างที่ไม่ต้องการ หรือจัดเรียงวัตถุ SVG ดั้งเดิมใหม่อย่างถาวร การทดสอบของเราใช้จังหวะเปิดที่เขียนขึ้นแปดครั้ง ไม่ใช่โครงร่างแบบเวกเตอร์จาก PerfectVector หรือการวาดด้วยปากกาจริง
วินิจฉัยการกระโดดก่อนที่จะเปลี่ยนลำดับ
การเคลื่อนไหวโดยให้ปากกาสัมผัสกระดาษเป็นเส้นทางที่ทำเครื่องหมาย การเคลื่อนไหวโดยยกปากกาขึ้นจากกระดาษคือการเคลื่อนไหวระหว่างเครื่องหมายโดยยกปากกาขึ้น การวาดภาพที่ดูสั้นอาจมีการเคลื่อนไหวที่ยาวนานโดยยกปากกาขึ้นจากกระดาษเมื่อวัตถุที่ต่อเนื่องกันอยู่ห่างจากกัน
| สิ่งที่แสดงตัวอย่าง | จะต้องจัดการอะไรก่อน |
|---|---|
| ขอบสองเส้นรอบเส้นที่ควรเป็นหนึ่งขีด | สร้าง เส้นทางสายเดียว ที่ต้องการ |
| เส้นรอบวงว่างที่คุณต้องการให้มีพื้นที่แรเงา | สร้างเส้นทางปากกาเติมฟักที่ชัดเจน |
| เครื่องหมายถูกต้อง แต่ข้ามหน้าซ้ำๆ | เปรียบเทียบการตั้งค่าการเรียงลำดับเส้นทางและการกลับทิศทางเส้นทางด้านล่าง |
| เส้นที่ไม่ต้องการลากระหว่างเครื่องหมายแยกกัน | ตรวจสอบเรขาคณิตแบบปากกาลงและการเชื่อมต่อเส้นทางก่อนที่จะยอมรับเส้นทางที่สั้นกว่า |
การวัด ความยาวเส้นทาง SVG จะตอบคำถามว่าเรขาคณิตของการวาดมีความยาวเท่าใด โดยตัวมันเองไม่ได้รวมการเดินทางของเครื่องระหว่างเส้นทางเหล่านั้นด้วย
การอ้างอิง AxiDraw CLI จะแยกแยะการตั้งค่าเหล่านี้: โดยปกติ 0 จะเป็นไปตามลำดับเอกสารที่มีการเข้าร่วม 1 ยังจัดลำดับเส้นทางใหม่ และ 2 ยังอนุญาตให้มีการกลับเส้นทางอีกด้วย การเชื่อมต่อเส้นทางการวาดที่อยู่ติดกันเป็นการตัดสินใจแยกต่างหาก สำหรับการเปรียบเทียบนี้ เราปิดใช้งานด้วย min_gap = -1 ดังนั้นเส้นที่อยู่ติดกันจึงไม่สามารถกลายเป็นเครื่องหมายต่อเนื่องได้
การกลับรายการอาจมีความสำคัญสำหรับงานที่ต้องคำนึงถึงทิศทาง หากภาพวาดต้องเป็นไปตามลำดับการเขียนหรือทิศทางเฉพาะ เส้นทางการเคลื่อนที่ที่สั้นกว่าโดยยกปากกาขึ้นนั้นไม่เพียงพอที่จะยอมรับการตั้งค่า 2 เลเยอร์ยังจำกัดการเรียงลำดับ ไม่ควรถือว่ากลุ่มที่ซ้อนกันเพื่อรักษาลำดับการวาดไว้ภายใต้การปรับให้เหมาะสม ตรวจสอบตัวอย่างจริงสำหรับเอกสารของคุณ
เรียกใช้การแสดงตัวอย่างแบบออฟไลน์สามรายการบน SVG ที่ไม่เปลี่ยนแปลง
ตัวอย่างนี้ต้องใช้ Python และ AxiDraw Python API อย่างเป็นทางการ เราทดสอบ API 3.9.6 ด้วย Python 3.9.6 ปฏิบัติตามคำแนะนำในการติดตั้งอย่างเป็นทางการ หากไม่ได้ติดตั้งโมดูลในสภาพแวดล้อม Python ที่คุณใช้
การอ้างอิง Python API กำหนดการแสดงตัวอย่างเป็นการจำลองออฟไลน์ ตั้งค่า preview = True หลัง plot_setup และ ก่อน plot_run สคริปต์ด้านล่างจะตั้งค่าและยืนยันเสมอ ไม่มีการโทรเชื่อมต่ออุปกรณ์
บันทึกตัวอย่างเล็กๆ นี้เป็น eight-strokes.svg หรือใช้สำเนา SVG ของคุณเอง:
<svg xmlns="http://www.w3.org/2000/svg" width="100mm" height="80mm" viewBox="0 0 100 80">
<g fill="none" stroke="#152b3b" stroke-width="0.4">
<path id="stroke-0" d="M 10 20 L 18 20"/>
<path id="stroke-1" d="M 88 60 L 80 60"/>
<path id="stroke-2" d="M 20 20 L 28 20"/>
<path id="stroke-3" d="M 78 60 L 70 60"/>
<path id="stroke-4" d="M 30 20 L 38 20"/>
<path id="stroke-5" d="M 68 60 L 60 60"/>
<path id="stroke-6" d="M 40 20 L 48 20"/>
<path id="stroke-7" d="M 58 60 L 50 60"/>
</g>
</svg>อุปกรณ์จับยึดมีวิวพอร์ต 100 × 80 มม. และขนาด viewBox ที่ตรงกัน ซึ่งแมปแต่ละหน่วยพิกัดเป็น 1 มม. ที่นี่ ตาม การแมปวิวพอร์ตและ viewBox ของ SVG แต่ละจังหวะทั้งแปดนั้นยาว 8 มม.
บันทึกสิ่งต่อไปนี้เป็น preview-orders.py:
from pathlib import Path
import json
import sys
from pyaxidraw import axidraw
source = Path(sys.argv[1]).resolve()
destination = Path(sys.argv[2])
destination.mkdir() # Use a new directory; preserve previous results.
reports = []
for order in (0, 1, 2):
ad = axidraw.AxiDraw()
ad.plot_setup(str(source))
ad.options.preview = True
ad.options.rendering = 3
ad.options.reordering = order
ad.options.random_start = False
ad.options.auto_rotate = False
ad.options.report_time = False
ad.params.min_gap = -1
assert ad.options.preview is True
output = ad.plot_run(True)
if ad.errors.code:
raise RuntimeError(f"Preview error: {ad.errors.code}")
(destination / f"preview-order-{order}.svg").write_text(output)
reports.append({
"order": order,
"pen_down_m": ad.distance_pendown,
"pen_up_m": ad.distance_total - ad.distance_pendown,
"pen_lifts": ad.pen_lifts,
})
report = json.dumps(reports, indent=2)
(destination / "distances.json").write_text(report + "\n")
print(report)รันด้วยสภาพแวดล้อม Python ที่มี API อย่างเป็นทางการ โดยใช้ชื่อไดเร็กทอรีเอาต์พุตใหม่:
python3 preview-orders.py eight-strokes.svg preview-checkโดยจะบันทึก SVG การวินิจฉัยสามรายการและ distances.json rendering = 3 รวมถึงการเคลื่อนไหวทั้งการยกและการวาด การเริ่มสุ่มและการหมุนอัตโนมัติปิดอยู่ การเข้าร่วมเส้นทางถูกปิดใช้งาน คงตัวเลือกเหล่านั้นไว้เมื่อเปรียบเทียบไฟล์ของคุณเอง สคริปต์นี้เป็นวิธีการตรวจสอบแบบออฟไลน์ ไม่ใช่คำสั่งในการใช้งานพล็อตเตอร์
เปรียบเทียบการเคลื่อนไหวกับรูปทรงปากกาที่ยกและวาดแยกกัน
ในการแข่งขันแปดจังหวะของเรา สคริปต์ที่แน่นอนถูกสร้างขึ้น:
| กำลังจัดลำดับใหม่ | การเคลื่อนไหวโดยประมาณโดยยกปากกาขึ้นจากกระดาษ | การเคลื่อนไหวโดยให้ปากกาสัมผัสกับกระดาษ | รายงานลิฟท์ |
|---|---|---|---|
0 | 0.509749 ม | 0.064 ม | 8 |
1 | 0.223592 ม | 0.064 ม | 8 |
2 | 0.180919 ม | 0.064 ม | 8 |
ข้อมูลเหล่านี้เป็นค่าประมาณของซอฟต์แวร์เนทิฟสำหรับไฟล์นี้ รวมถึงการเดินทางตั้งแต่เริ่มต้นและกลับบ้าน ระยะปากกาลงอยู่ที่ 64 มม. และจำนวนการยกยังคงอยู่ที่แปด การเคลื่อนไหวที่สั้นลงโดยยกปากกาขึ้นจากกระดาษไม่ได้หมายความว่าการยกน้อยลง เราไม่ได้วัดการวาดด้วยปากกาจริง เวลาในการวางแผนที่ผ่านไป หรือการปรับปรุงที่รับประกันสำหรับการวาดอื่น

รูปที่ซ้อนกันจะเปรียบเทียบการตั้งค่า 0 และ 2; ตารางยังรวมถึง 1 โดยจะแสดงสำเนาของเส้นทางแสดงตัวอย่าง SDK ดั้งเดิมที่มีสีน้ำเงินและสีม่วงแดงเข้มขึ้น และมีลายเส้นที่หนาขึ้นเพื่อให้อ่านได้ชัดเจน นี่เป็นรูปแบบการแสดงผล ไม่ใช่ความกว้างของปากกาจริง พิกัดเส้นทางดั้งเดิมและการแปลงไม่มีการเปลี่ยนแปลง วิวพอร์ตจอแสดงผลจะครอบตัดพื้นที่ที่ไม่ได้ใช้ มีการตรวจสอบการแสดงตัวอย่างดั้งเดิมทั้งสามรายการ และการตรวจสอบเรขาคณิตอิสระพบว่าส่วนการวาดภาพแนวนอนแปดส่วนเหมือนกัน ทำให้สามารถกลับลำดับจุดสิ้นสุดได้ จุดยอดแบบปากกาที่สุ่มตัวอย่างทั้งหมดยังคงอยู่บนส่วนที่ตั้งใจไว้
สำหรับไฟล์ของคุณ ให้เปิด SVG ตัวอย่างแต่ละรายการ และตรวจสอบเลเยอร์การวาดแยกจากเลเยอร์ระยะยกขึ้น ยืนยันขนาดหน้าและตำแหน่งที่ต้องการ เครื่องหมายที่คาดหวังทั้งหมด รูหรือช่องว่างที่ไม่เปลี่ยนแปลง และไม่มีตัวเชื่อมต่อที่วาดใหม่ ตรวจสอบว่าจังหวะการกลับด้านเป็นที่ยอมรับได้ ปฏิเสธเส้นทางที่วาดเครื่องหมายผิด แม้ว่ารายงานระยะทางจะน้อยกว่าก็ตาม
ทำความเข้าใจว่าตัวอย่างที่บันทึกไว้จะเก็บรักษาอะไรไว้บ้าง
เอกสารการจัดลำดับใหม่ของ AxiDraw อธิบายว่าการปรับให้เหมาะสมเกิดขึ้นในสำเนาชั่วคราว ออบเจ็กต์ดั้งเดิมในเอาต์พุต SVG ที่บันทึกไว้จะคงลำดับเดิมไว้ ผลลัพธ์ของเรายังคงรักษาพาธ stroke-* ดั้งเดิมทุกอันและลำดับดั้งเดิมของมันไว้เช่นเดียวกัน
ดังนั้น preview-order-2.svg จึงเป็นการแสดงตัวอย่างเพื่อการวินิจฉัย ไม่ใช่ข้อพิสูจน์ว่าโปรแกรมอื่นจะอ่านไฟล์อาร์ตเวิร์คที่เรียงลำดับใหม่อย่างถาวร เก็บแหล่งที่มา ตัวเลือกที่เลือก และรายงานการเปรียบเทียบไว้ด้วยกัน เมื่อใช้ต้นฉบับกับ AxiDraw ในภายหลัง ให้ใช้การตั้งค่าลำดับที่ต้องการอีกครั้งในเวิร์กโฟลว์การลงจุดที่เหมาะสม
หากปัญหาของคุณคือรูปทรงเรขาคณิตในการวาดภาพที่ไม่ต้องการ ให้กลับไปที่ขั้นตอนการสร้างเส้นทาง หากเพียงเส้นทางการเคลื่อนที่โดยยกปากกาขึ้นเท่านั้นที่สิ้นเปลือง ให้เปรียบเทียบตัวอย่างการตั้งค่าคงที่ ขนาดทางกายภาพ พฤติกรรมของปากกา และการทำงานของเครื่องยังคงต้องมีการตรวจสอบด้วยตนเอง การควบคุมแบบออฟไลน์นี้ไม่สามารถพิสูจน์ได้
ตำแหน่งที่ PerfectVector พอดีก่อนการตรวจสอบนี้
หากคุณยังมีเพียงอาร์ตเวิร์กแรสเตอร์และต้องการให้รูปร่างที่มีโครงร่างที่มองเห็นได้พร้อมการเติมสีเป็นรูปร่างเวกเตอร์ที่แก้ไขได้ เวกเตอร์รูปภาพของ PerfectVector อาจเป็นขั้นตอนก่อนหน้านี้ที่เหมาะสม ตรวจสอบภาพตัวอย่างโดยเทียบกับรูปทรงและรูของแหล่งที่มาของคุณ มันไม่ได้อนุมานเส้นกึ่งกลางเส้นเดียวหรือปรับลำดับเส้นทาง AxiDraw ให้เหมาะสม ใช้เวิร์กโฟลว์เส้นกึ่งกลางหรือฟักเมื่อเป็นเส้นทางที่คุณต้องการ
หากคุณมีเส้นทาง SVG ที่ถูกต้องอยู่แล้ว ให้เก็บไว้และดำเนินการตรวจสอบออฟไลน์โดยตรง การย้อนกลับ SVG จะทำให้ข้อมูลการสั่งซื้อไม่ขาดหายไป การแสดงตัวอย่างที่ได้รับการป้องกันของ PerfectVector เป็นแบบดูอย่างเดียว การแก้ไขและส่งออกผลลัพธ์จำเป็นต้องปลดล็อค
คำถามที่พบบ่อย
การเรียงลำดับ AxiDraw ใหม่จะเปลี่ยนลำดับออบเจ็กต์ของ SVG ของฉันอย่างถาวรหรือไม่ ไม่ การเพิ่มประสิทธิภาพที่บันทึกไว้จะใช้สำเนาชั่วคราว การแสดงตัวอย่างที่บันทึกไว้ประกอบด้วยเลเยอร์การเคลื่อนไหวเพื่อการวินิจฉัย ในขณะที่ออบเจ็กต์อาร์ตเวิร์คต้นฉบับยังคงรักษาลำดับไว้ เก็บการตั้งค่าที่เลือกไว้แยกกัน
เหตุใดการเคลื่อนไหวด้วยปากกาที่ยกขึ้นจากกระดาษจึงหดตัวในขณะที่จำนวนการยกยังคงเท่าเดิม สามารถเยี่ยมชมแปดจังหวะที่แยกจากกันในลำดับหรือทิศทางที่แตกต่างกันได้ ในการทดสอบอ้างอิงของเราที่ปิดใช้งานการรวมเส้นทาง การตั้งค่าทั้งหมดรายงานการยกแปดครั้งและการวาด 64 มม. ในขณะที่การเคลื่อนไหวโดยยกปากกาขึ้นเปลี่ยนไป
การสั่งซื้อสามารถแก้ไขการติดตามโครงร่างสองชั้นหรือสร้างการแรเงาได้หรือไม่ ไม่ใช่ครับ แก้ไขเส้นทางการวาดก่อน ใช้เวิร์กโฟลว์เส้นกึ่งกลางสำหรับจังหวะเดียว หรือสร้างเส้นทางฟักอย่างชัดเจนสำหรับการแรเงาพื้นที่ จากนั้นเปรียบเทียบลำดับบนรูปทรงเรขาคณิตที่ยอมรับ
แหล่งที่มา
- AxiDraw — การอ้างอิง Python API — กำหนดการแสดงตัวอย่างและการแสดงผลแบบออฟไลน์ โดยมีตัวอย่างที่ส่งคืน SVG การแสดงตัวอย่าง
- AxiDraw — การอ้างอิง CLI — ครอบคลุมการติดตั้ง การจัดลำดับเส้นทางและการตั้งค่าการกลับทิศทางของเส้นทาง การจัดการเลเยอร์ และการเพิ่มประสิทธิภาพชั่วคราว
- W3C — ระบบพิกัด SVG การแปลงและหน่วย — อธิบายการแมปวิวพอร์ตที่ใช้โดยตัวอย่างที่มีมิติ
ยังคงเริ่มต้นจากการวาดภาพแรสเตอร์ที่มีรูปทรงเค้าร่างพร้อมเติมสีที่คุณต้องการหรือไม่? เริ่มต้นอย่างอิสระด้วยภาพของคุณเอง จากนั้นตรวจสอบรูปทรงและรูของตัวอย่างเทียบกับแหล่งที่มา เมื่อมีเส้นทางปากกาที่ต้องการแล้ว ให้ตรวจสอบคำสั่งซื้อแยกกันด้วยวิธีออฟไลน์ด้านบน
เพิ่มเติมจากบล็อก
ความลึก V-Carve: ทำไมเส้นโลโก้กว้างจึงตัดลึก
เรียนรู้ว่าความกว้างภาพและมุมดอก V กำหนดความลึกแกะอย่างไร คำนวณตัวอย่างโลโก้ และแยกความลึกพื้นราบ ต่อเที่ยว และเรขาคณิตเส้นขอบที่ลาก
เส้นกรีดรอยพับกับเส้นตัด SVG: อ่านรูปทรงให้เข้าใจ
อ่านรูปทรงรอยพับ SVG ก่อนกำหนด Score หรือ Cut เปรียบเทียบพาธเปิด แถบเติมสี และเส้นประ แล้วตรวจขั้นตอนกำหนดงานของ Cricut ตามเอกสาร


