No Picture

บทเรียนที่ 3. การเขียนฟังก์ชั่นย่อยและวิธีการนำไปใช้งาน

July 22, 2017 Teerapat 0

ดังที่ได้อธิบายไปแล้วว่าฟังก์ชั่นย่อยเหมาะสำหรับใช้เขียนฟังก์ชั่นที่ต้อง เรียกใช้งานบ่อยๆ สามารถนำไปเป็นส่วนหนึ่งและนำไปเรียกใช้ในฟังก์ชั่นหลักอื่นๆได้มากกว่า หนึ่งฟังก์ชั่น ซึ่งตรงนี้จะช่วยอำนวยความสะดวกในการเขียนโปรแกรมช่วยให้ไม่ต้องมาเขียน นิพจน์ซ้ำๆกันเพื่อให้ได้ผลตามที่ต้องการ ช่วยลดความยาวและความซับซ้อนของโปรแกรม ทำให้อ่านโค๊ดโปรแกรมได้ง่ายขึ้น เพื่อให้เข้าใจได้ง่ายขึ้นเรามาลองเขียนตามตัวอย่างกันเลยดีกว่าครับ   ตัวอย่างการเขียนฟังก์ชั่นและวิธีการนำไปใช้งานในฟังก์ชั่นหลัก A. เข้าไปใน AutoCAD ไปที่เมนู Tools > AutoLISP > Visual LISP Editor (ตอนนี้เราจะเริ่มเขียนใน Visual LISP กันแล้ว)   เขียนฟังก์ชั่นย่อย และ ฟังก์ชั่นหลักดังนี้ ฟังก์ชั่นย่อย set_to_color : มีหน้าที่ในการเก็บค่าสีเดิม และ กำหนดให้เป็นสีหมายเลข 1 หรือสีแดง ก่อนการเขียนวัตถุ ฟังก์ชั่นหลัก drawline : มีหน้าที่เขียนเส้นตรงสีแดงหนึ่งเส้น ฟังก์ชั้นหลัก drawcircle : มีหน้าที่เขียนรูปวงกลมสีแดงหนึ่งรูป ในที่นี้ผู้เขียนขออนุญาตไม่อธิบายในรายละเอียดของฟังก์ชั่นในแต่ละบรรทัด ทั้งนี้เพื่อให้ผู้อ่านได้ทราบถึงหลักในการเขียนและวิธีการนำฟังก์ชั่นไปใช้ งานก่อนเป็นสำคัญ เขียนหรือคัดลอกโค๊ดเหล่านี้ลงใน Editor ของ VisualLISP (ถ้าอยากเก่งก็ต้องลองเขียนเองนะครับ) (defun set_to_color()                                                       ;;; สร้างฟังก์ชั่นย่อย set_to_color     (setq old_color(getvar “cecolor”))     (setvar “cecolor” “1”) )   (defun c:drawline()                                                         ;;; สร้างฟังก์ชั่นหลัก drawline     (setq p1 (getpoint “\nStart point :”))     (setq p2 (getpoint p1 “\nEnd point :”))     (set_to_color)                                    […]

No Picture

บทเรียนที่ 2. โครงสร้างและรูปแบบของการเขียนโปรแกรมด้วยภาษา AutoLISP

July 22, 2017 Teerapat 0

หลังจากที่ได้ทำความค้นเคยกับการเขียนโปรแกรมด้วยภาษา AutoLISP กันไปแล้ว คราวนี้ก็มาถึงการทำความรู้จักกับส่วนประกอบของโครงสร้างและรูปแบบของภาษา กันบ้าง เราจะนำโปรแกรม Hello ที่ได้นำเสนอในบทเรียนที่แล้วมาแยกส่วนประกอบ พร้อมกับแนะนำให้ท่านผู้อ่านได้รู้จักกับส่วนประกอบ หน้าทีและข้อกำหนดของแต่ละส่วนให้ได้รู้กันซึ่งมีรายละเอียดดังนี้   A. เครื่องหมาย วงเล็บเปิด และ วงเล็บปิด เครื่องหมาย วงเล็บเปิด และ วงเล็บปิด จะมีคู่ของมันเสมอหากคู่ใดขาดวงเล็บไปตัวใดตัวหนึ่งจะส่งผลให้โปรแกรม error ทันที บางทีหายไปเพียงตัวเดียวเล่นเอาคนเขียนปวดหัวไปเลยทีเดียว ทางแก้ที่ดีคือเมื่อเราพิมพ์วงเล็บในครั้งใดควรพิมพ์ออกมาเป็นคู่ จากนั้นจึงแทรกโค๊ดโปรแกรมในส่วนอื่นลงไประหว่างวงเล็บที่เราพิมพ์ขึ้นมา วิธีนี้จะช่วยให้เราไม่ต้องมาปวดหัวกับวงเล็บในภายหลังดีนักแล ( defun C:Hello ( )     ( setq HL “Hello AutoLISP” )     ( princ HL )     ( princ ) ) ( … ) คู่สีแดง เป็นคู่ที่ครอบคลุมเนื้อหาของคำสั่งของโปรแกรมที่เราเขียนทั้งหมด คู่นี้จะช่วยแยกโปรแกรมหรือฟังก์ชั่นที่เราเขียนรวมไว้ในไฟล์เดียวออกจากกัน ทำให้เราสามารถเขียนหลายๆโปรแกรมเก็บไว้ในไฟล์เดียวกันได้ซึ่งจะสะดวกต่อการ เรียกใช้งาน แต่ก็ไม่เหมาะกับโปรแกรมที่มีความยาวมากๆควรแยกเก็บจะดีกว่า ( … ) คู่สีน้ำเงิน คู่นี้จะใช้ในการกำหนดรูปแบบของตัวแปร ซึ่งเราจะหนดหรือไม่ก็ได้ขึ้นอยู่กับความต้องการของผู้ใช้งาน ( … ) คู่สีชมพู วงเล็บสีชมพูทั้งสามคู่เป็นเพียงตัวอย่างของนิพจน์ที่ใช้เป็นตัวอย่างในการ นำเสนอจำนวนและรูปแบบของนิพจน์จะขึ้นอยู่กับโปรแกรมที่เราเขียนขึ้นมา นิพจน์จะเป็นส่วนในรายละเอียดของโปรแกรมไม่ว่าจะเป็นการประกาศตัวแปร การคำนวณ การกำหนดค่า การรอรับค่าจากผู้ใช้งาน การแสดงผลทางจอภาพ และอื่นๆอีกมากมาย   B. คำสั่ง defun (defind function) เป็นคำสั่งที่ใช้สร้างคำสั่งหรือฟังก์ชั่นขึ้นมาใหม่ ในการใช้คำสั่งนี้เราสามารถสร้างฟังก์ชั่นขึ้นมาได้สองรูปแบบคือ ฟังก์ชั่นที่สามารถเรียกใช้งานได้แบบเดียวกับคำสั่งทั่วไปของออโตแคดโดยการ พิมพ์ชื่อฟังก์ชั่นนั้นลงใน Command Line ได้เลย (ก็โปรแกรม Hello ที่เราเพิ่งเขียนไปนั่นหละครับเป็นฟังก์ชั่นประเภทนี้) ส่วนอีกประเภทหนึ่งจะมีลักษณะเป็นฟังก์ชั่นย่อยคล้ายๆกับโมดูลในโปรแกรมภาษา อื่นเหมาะสำหรับใช้เขียนฟังก์ชั่นที่ต้องเรียกใช้งานบ่อยๆซึ่งเราจะได้นำ เสนอรายละเอียดตัวอย่างและการเรียกใช้งานในบทเรียนต่อไป แต่ก่อนที่เราจะมาเรียนรู้วิธีการเขียนและเรียกใช้ฟังก์ชั่นในแบบที่สองนั้น เรามาดูรูปแบบและข้อแตกต่างของฟังก์ชั่นทั้งสองชนิดที่กล่าวกันก่อน รูปแบบของฟังก์ชั่นที่เขียนขึ้นเพื่อให้ใช้งานได้เช่นเดียวกับคำสั่งปกติของออโตแคด ( defun C:ชื่อฟังก์ชั่นหลัก ( )      (นิพจน์_1)      (นิพจน์_2)      (นิพจน์_n) )   รูปแบบของฟังก์ชั่นที่เขียนขึ้นเพื่อใช้เป็นโมดูลหรือโปรแกรมย่อย ( defun ชื่อฟังก์ชั่นย่อย ( )      (นิพจน์_1)      (นิพจน์_2)      (นิพจน์_n) ) จากรูปแบบของฟังก์ชั่นทั้งสองประเภทที่ได้นำเสนอไว้ด้านบนจะเห็นว่ามีข้อแตก ต่างกันเพียงอย่างเดียวคือ มี และ ไม่มี เครื่องหมาย C: เท่านั้นแต่หน้าที่และการใช้งานของฟังก์ชั่นทั้งสองแบบจะไม่เหมือนกัน…โปรดติดตามบทความต่อไป  

No Picture

บทเรียนที่ 1. Hello AutoLISP

July 22, 2017 Teerapat 0

ก่อนที่เราจะมาทำการศึกษาการเขียนโปรแกรมด้วยภาษา AutoLISP กันนั้น เรามาลองเขียนโปรแกรมเล็กๆสักโปรแกรมกันก่อนเพื่อที่จะใช้เป็นตัวอย่างในการ ศึกษาโครงสร้างและรูปแบบของการเขียนโปรแกรมด้วยภาษา AutoLISP กัน โปรแกรมนี้มีชื่อว่าโปรแกรม Hello เป็นโปรแกรมที่ใช้แสดงข้อความ “Hello AutoLISP” ลงในแถบ Command Line ของออโตแคด   ตัวอย่างการเขียนโปรแกรม Hello ใน AutoCAD (ขอย้ำนะครับว่าในออโตแคด) A. เปิด AutoCAD ขึ้นมาใช้งาน กด F2 หรือ Ctrl+F2 ในกรณีที่ติดตั้งโปรแกรม WinBLOCK B. จะปรากฏหน้าต่าง AutoCAD Text Window ให้พิมพ์โค๊ดโปรแกรม Hello นี้ลงไปใน Command Line ทีละบรรทัดดังนี้ (defun C:Hello ( )     (setq HL “Hello AutoLISP”)     (princ HL)     (princ) )   C. เรียกใช้คำสั่ง Hello ที่เพิ่งสร้างขึ้นมาใช้งาน โดยการพิมพ์ Hello หรือ HELLO หรือ hello ลงใน Command Line โปรดสังเกตว่าเราสามารถเรียกใช้คำสั่งที่สร้างขึ้นได้จากตัวอักษรพิมพ์เล็ก หรือใหญ่ก็ได้โปรแกรมจะถือว่าเป็นคำสั่งเดียวกันเสมอ ตัวอย่างการเขียนโปรแกรม Hello ใน AutoCAD Text Window   หลังจากที่ทำความรู้จักและหัดเขียนโปรแกรมด้วยภาษา AutoLISP กันไปแล้วในบทเรียนต่อไปเราจะมาทำความรู้จักกับส่วนต่างๆของโปรแกรม Hello กัน