วันศุกร์ที่ 12 ตุลาคม พ.ศ. 2561

ตัวแปร (Variable)


ตัวแปร  (Variable) ตัวแปรมีไว้ใช้เก็บค่าต่าง ๆ เช่น ตัวเลข ตัวอักษร โดยเราจะใช้ฟังก์ชั่น setq ในการกำหนดให้ตัวแปร เช่น a ให้มีค่าเท่ากับ 10 ลองทำตามดูเลย  (setq a 10) กด enter ค่าของ a ที่ออกมา 10 จากนั้นลองใช้ฟังก์ชั่น + ข้างต้นมาทดสอบดู (+ a 2) แล้วกด Enter  ผลที่ออกมาเท่ากับ  12 
  

ตัวอย่างที่ 2

ลองทำต่อไปอีกคือ    (setq b 20)  Enter   (setq c 30)  Enter แล้วนำมา + กันดูใหม่ (+ (+ a b) c) ผลที่ออกมาก็คือ  60  
ตัวอย่างที่ 3

*** ใน 1 วงเล็บสามารถใช้ได้ต่อ 1 คำสั่งหรือ นิพจน์  เราต้องเช็ควงเล็บเปิด ( และปิด  ) ให้ดีด้วย และช่องไฟระหว่างคำสั่งหรือตัวอักษรต้องเว้น 1 ช่องไฟเสมอด้วย *** 

 แสดงว่าเรากำหนดค่า  ตัวแปร  (Variable) ได้แล้ว ถ้าเราจะต้องการตรวจสอบค่าของตัวแปร แต่ละตัวว่ามีค่าเท่าไรนั้น ใช้เครื่องหมาย ! นำหน้าตัวแปรที่เราจะต้องการตรวจสอบค่า เช่น  !a !b !c  ตามตัวอย่าง

                        
ตัวอย่างที่ 4
Setq   เป็นตัวกำหนด ค่า  (value) ของ ตัวแปร  (Variable)  ด้วย คำสั่ง (expression)  ต่างๆ โดยเราสามารถกำหนดค่า ตัวแปร ได้หลายๆ ตัวแปร ในฟังชั่น setq ฟังชั่นเดียว  ตามตัวอย่างที่แล้วเราสามารถกำหนดได้ดังนี้  (setq  a  10  b  20  c  30)  ใน setq เดียวเราก็จะได้ค่าของ  a  b  c  ตามที่เรากำหนดซึ่งอาจจะมากว่านี้ก็สามารถกำหนดได้

ฟังก์ชั่นทางคณิตศาสตร์


การ บวก ลบ คูณ หาร การยกกำลังของตัวเลข และการถอดรูท ใน AutoLISP
      ลองทำการติดต่อกับ AutoLISP โดยตรง (Direct Mode)  โดยพิมพ์ที่ command : (+ 2 1) แล้วลองกด  Enter ดูผลที่ได้ = คือผลที่ได้จากฟังก์ชั่นบวกใน  AutoCAD ฟังก์ชั่นอื่นก็เช่นกัน  
            (- 2 1)      = ลบ                 
            (* 2 2)     = คูณ  
            (/ 4 2)      = หาร
            (expt 4 2)        = ยกกำลัง (4 ยกกำลัง 2)
            (sqrt 16)    = การถอดรูท

ตัวอย่างที่ 1


สัญลักษณ์ผังงาน ( Flowchart Symbols)


สัญลักษณ์ผังงาน ( Flowchart Symbols)

สัญลักษณ์ Flowchart

ฟังก์ชั่นเกี่ยวกับ Entity และการเลือก Entity


ฟังก์ชั่นเกี่ยวกับ Entity และการเลือก Entity
      ssget       เลือก Entity มาเก็บไว้ใน Selection Set
      sslength    จำนวน Entity ที่อยู่ใน Selection Set
      ssname      แสดง Entity Name ใน Selection Set
      ssadd       เพิ่ม Entity เข้าไปใน Selection Set
      ssdel       ลบ Entity ออกจาก Selection Set
      ssmemb      ทดสอบว่า Entity ที่กำหนดเป็นสมาชิกใน Selection Set หรือไม่
      entnext    แสดง Entity Name และรายากรของ Entity ใน Database
      entlast     แสดง Entity อันสุดท้ายใน Database
      entsel      เลือก Entity ที่ตำแหน่งพิกัดบน Screen
      entdel      ลบหรือเรียกคืน Entity จาก Database
      entget      เรียก Entity และแสดงรายการใน Entity
      entmod      แก้ไขรายการใน Entity
      entupd      เปลี่ยนรูปแบบบนจอภาพให้เป็นไปตามที่แก้ไข
      tblnext     เรียกดูรายการใน Symbol ที่มีชื่อ Table ตรงกับที่ระบุ


Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

ฟังก์ชั่นที่ควบคุมการ Input & Output


ฟังก์ชั่นที่ควบคุมการ Input & Output
      command    เรียกใช้คำสั่งใน AutoCAD
      distance    หาค่าระยะทางระหว่างจุดพิกัดสองจุด
      initget     กำหนดข้อจำกัดของข้อมูลที่จะรับด้วย getxxx ต่าง ๆ
      getangle    รับค่ามุมแบบ เรเดียน (radian)
      getcorner   รับค่าจุดตรงกันข้ามของกรอบสี่เหลี่ยม
      getdist     รับค่าระยะทาง
      getint      รับค่าจำนวนเต็ม
      getkword    รับค่าใน Keyword
      getorient   รับค่ามุมแบบกำหนดจุด สองจุด
      getpoint    รับค่าพิกัดจุด
      getreal     รับค่าจำนวนจริง
      getstring   รับค่าที่เป็นข้อความ
      getvar      อ่านค่าจากตัวแปรระบบ
      setvar      ตั้งค่าให้กับตัวแปรระบบ
      inters      หาจุดตัดของเส้นตรงสองเส้น
      osnap       หาค่าจุดพิกัดตาม Object Snap Mode
      polar       หาจุดพิกัดแบบ เรเดียน (radian)
      angle       หาค่ามุมระหว่างจุดพิกัดสองจุด
      open        เปิดไฟล์ก่อนที่จะใช้เขียนหรืออ่าน
      close       ปิดไฟล์ที่เปิดเอาไว้
      load        เรียกไฟล์ของ AutoLISP เข้ามาเก็บไว้ในหน่วยความจำ
      menucmd    เรียก Sub Menu จาก AutoCAD Menu
      prin1       แสดงค่าใด ๆ ไปที่จอภาพหรือไฟล์
      princ       แสดงค่าใด ๆ ไปที่จอภาพหรือไฟล์
      print       แสดงค่าใด ๆ ไปที่จอภาพหรือไฟล์
      prompt      แสดงข้อความ String ออกไปที่จอภาพ
      read        แสดงค่าจากข้อความ String
      read-char   รับค่าตัวอักษรหนึ่งตัวจากคีย์บอร์ด หรือจากไฟล์
      read-line   รับข้อความจากคีย์บอร์ดหรือไฟล์ ทีละบรรทัด
      write-char  เขียนค่าตัวอักษรไปที่จอภาพหรือไฟล์ ทีละหนึ่งตัวอักษร
      write-line  เขียนข้อความไปที่จอภาพหรือไฟล์ ทีละบรรทัด
      terpri      ขึ้นบรรทัดใหม่บนจอภาพ
      graphscr    เปลี่ยนจาก Text Screen ไปเป็น Graphics Screen
      textscr     เปลี่ยนจาก Graphics Screen  ไปเป็น Text Screen
      redraw      ล้างภาพแสดงรูปบนจอใหม่
      grclear     Clear Graphics Screen
      grdraw      สร้าง Graphics Line บน Graphics Screen
      grtext      เขียนข้อความไปที่ Graphics Screen
      grread      อ่านข้อมูลจากอุปกรณ์  Input โดยตรง
      findfile    ใช้ในการหาไฟล์
      getenv      ใช้ในการหาชื่อตัวแปรใน Environment
      getfiled    ใช้ในการแสดงข้อความใน Dialog Box

Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

ฟังก์ชั่นที่ใช้กับข้อมูลแบบ String,ฟังก์ชั่นเกี่ยวกับเงื่อนไข, การวนรอบ และ Subroutine


ฟังก์ชั่นที่ใช้กับข้อมูลแบบ String
      strcase           เปลี่ยน String ที่เป็นอักษรตัวเล็กให้เป็นตัวใหญ่
      strcat            เชื่อมต่อข้อความ
      strlen            ความยาวของ String
      substr            คัดข้อความย่อยออกจาก String ที่กำหนด

ฟังก์ชั่นเกี่ยวกับเงื่อนไข, การวนรอบ และ Subroutine
      repeat            ทำซ้ำตามจำนวนที่กำหนด
      while       วนรอบจนกว่าเงื่อนไขจะเป็นเท็จ
      if          กำหนดเงื่อนไขให้นิพจน์ทำงาน
      progn       ใช้ในการรวมนิพจน์ให้เป็นกลุ่ม
      cond        กำหนดเงื่อนไขเป็นชุด เพื่อกระทำนิพจน์ต่าง ๆ ตามเงื่อนไข
      defun       สร้างฟังก์ชั่นใหม่
      lambda      สร้างฟังก์ชั่นใหม่ ณ ตำแหน่งที่ต้องการใช้งาน
      mapcar      นำฟังก์ชั่นไปทำงานกับรายการ List ทีละค่า
      apply       นำฟังก์ชั่นไปทำงานกับรายการ List ทุกค่า

Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

ฟังก์ชั่นที่เปลี่ยนแปลงชนิดข้อมูล,ฟังก์ชั่นที่ใช้กับข้อมูลแบบ List


ฟังก์ชั่นที่เปลี่ยนแปลงชนิดข้อมูล
      angtos            เปลี่ยนตัวเลขค่ามุมเป็นตัวอักษร
      ascii       ค่ารหัสแอสกีของตัวอักษร
      atof        เปลี่ยนตัวอักษรให้เป็นจำนวนจริง
      atoi        เปลี่ยนตัวอักษรให้เป็นจำนวนเต็ม
      chr         เปลี่ยนตัวเลขให้เป็นตัวอักษรตามรหัสแอสกี
      itoa        เปลี่ยนเลขจำนวนเต็มให้เป็น String
      fix         เปลี่ยนตัวเลขให้เป็นจำนวนเต็ม
      float       เปลี่ยนตัวเลขให้เป็นจำนวนจริง
      rtos        เปลี่ยนจำนวนจริงให้เป็น String

ฟังก์ชั่นที่ใช้กับข้อมูลแบบ List
      append      เชื่อมต่อ List
      assoc       ค้นหาค่า Atom ใน Association List
      car         นำค่าแรกใน List มาใช้
      cdr         นำค่าที่เหลือจากค่าแรกใน List มาใช้
      caar, cddr, cadr, caddr, etc.   ฟังก์ชั่นผสมของ car กับ cdr
      foreach     ประมวลผลค่าแต่ละอันใน List ตามฟังก์ชั่นที่กำหนด
      last        ค่า Atom สุดท้ายใน List
      list        เชื่อมต่อ Atom ต่าง ๆ ใน List
      member     ค้นหาค่า Atom ใน List
      nth         แสดงค่า Atom ณ ตำแหน่งที่ระบุใน List
      quote ( ‘ )  ใช้นิพจน์หรือสัญลักษณ์โดยไม่ประเมินค่าออกมา
      reverse           สลับหัวข้อท้ายของ Atom ใน List
      setq        กำหนดค่าให้กับตัวแปร
      subst       เปลี่ยน Atom ตัวใหม่แทนที่ระบุทุกตัวใน  List
     
Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

วันพฤหัสบดีที่ 11 ตุลาคม พ.ศ. 2561

ฟังก์ชั่นพื้นฐานใน AutoLISP


ฟังก์ชั่นพื้นฐานใน AutoLISP
          ฟังก์ชั่นมาตรฐาน ใน AutoLISP มีอยู่มากกว่า 250 คำสั่ง ซึ่งแต่ละฟังก์ชั่นก็จะมีจุดประสงค์ของการใช้แตกต่างกันไป แต่ในการใช้งานจริง ๆ แล้วจะมีคำสั่งที่สำคัญในการใช้งานอยู่เพียงไม่มากนัก ที่จะนำมาสร้างโปรแกรม ซึ่งเราจะรวมเฉพาะฟังก์ชั่นพื้นฐาน และความหมายสั้น ๆ ของแต่ละฟังก์ชั่น โดยรวบรวมตามหน้าที่ของฟังก์ชั่นในลักษณะกลุ่มเดียวกันอย่างเป็นหมวดหมู่
      +     บวก
      -     ลบ
      *     คูณ
      /     หาร
      rem   จำนวนที่เหลือจากการหาร
      1+    เพิ่มค่าทีละหนึ่ง
      1-    ลดค่าทีละหนึ่ง
      max   ค่าสูงสุด
      min   ค่าต่ำสุด
      abs   ค่าสัมบูรณ์
      alert แจ้งข้อความที่ผิดพลาดบน Dialog Box
      atan  ค่า Arctangent
      sin   ค่า sine ของมุมเรเดียน
      cos   ค่า cosine ของมุมเรเดียน
      ~     Bitwise Not
      boole Boolean Bitwise
      logand      Logical AND
      logior      Logical OR
      lsh   Logical Shift
      log   ค่าลอการิทึมฐาน e
      sqrt  ค่ารากที่สอง
      exp   ค่า e ^ x
      expt  ค่า x ^ y
      gcd   ค่า ห. ร. ม.
      eval  แสดงค่า
      pi    ค่า π


Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

การเรียกใช้งานบน AutoCAD


การเรียกใช้งานบน AutoCAD
      หลังจากที่เราเขียนโปรแกรมและบันทึกไฟล์ไว้ในรูปแบบ AutoLISP ที่นามสกุล .LSP เรียบร้อยแล้ว จะต้องทำการเรียกโปรแกรมเข้ามาในหน่วยความจำ (โหลดโปรแกรม) ซึ่งมีรูปแบบดังนี้
      (LOAD “filename”)
      Filename เป็นชื่อของโปรแกรม โดยไม่จำเป็นต้องใส่นามสกุล .LSP เข้าไป ในกรณีที่ที่จะเรียกโปรแกรมจากไดเรกทอรี่อื่นนั้นต้องบอกพาท Path ด้วย ใน AutoCAD จะใช้เครื่องหมาย / หรือ \\ แทนเครื่องหมาย \ ที่ใช้ระบุ Path ตามปกติ เช่น เราต้องการโหลดโปรแกรม TEST.LSP จาก C:\LISP\TEST.LSP ก็จะใช้รูปแบบคือ
      (LOAD “C:/LISP/TEST”)  หรือ  (LOAD “C:\\LISP\\TEST”)
      แต่ก็ยังมี AutoLISP ที่ถูกเรียกเข้ามาในหน่วยความจำอย่างอัตโนมัติในทุก ๆ ครั้งที่เข้าโปรแกรม AutoCAD นั่นก็คือ ACAD.LSP ซึ่งเราสามารถกำหนดฟังก์ชั่นต่าง ๆ ที่ต้องการให้โหลดเข้าสู่หน่วยความจำไว้ในไฟล์นี้ก่อน และเมื่อเข้า โปรแกรม AutoCAD ใหม่ทุก ๆ ครั้ง โปรแกรมจะทำการค้นหาไฟล์ ชื่อ ACAD.LSP เพื่อที่จะทำการโหลดเข้าสู่หน่วยความจำโดยอัตโนมัติ
      นอกจากวิธีการโหลดทาง Command line แล้ว ยังมีวิธีการโหลดที่สะดวกมากขึ้นไปอีก ก็คือ การใช้เมนูในการโหลด ซึ่งจะเป็น Pull-Down Menu ดังนี้ 
1. ไปที่เมนูเลือก Tools
2. เลือกที่ Load Application

3. เข้าไปที่เก็บไฟล์ AutoLISP
4. เลือกไฟล์ AutoLISP ที่เราต้องการเรียกใช้งาน
5. เลือกกด Load
6. เลือกกด Close

7. เมื่อเราทำการเรียกใช้งาน Load เสร็จ จะมีข้อความแสดงรายละเอียด ที่ Command:



การเรียกใช้งาน AutoLISP แบบให้เปิด AutoCAD แล้วเรียกใช้งานได้เลย
1. ไปที่เมนูเลือก Tools
2. เลือกที่ Load Application

3. เข้าไปที่ Contents
4. เลือก Add. เพื่อเข้าไปเลือกไฟล์ AutoLISP ที่เราต้องการเรียกใช้งาน 

5. เลือกไฟล์ AutoLISP ที่เราต้องการเรียกใช้งาน
6. เลือกกด Open

7. ที่ Startup Suite จะแสดงชื่อไฟล์ AutoLISP และโฟเดอร์ที่เก็บไฟล์  และบอกว่าได้เพิ่มไฟล์ของเราเข้าไปที่ Startup Suite เรียบร้อยแล้ว กด Close เป็นอันเสร็จ ทีนี้เมื่อเราเข้าใช้งาน AutoCAD เราสามารถเรียกใช้งานได้เลยไม่ต้องมา Load ใช้งานอีก


รูปแบบการเขียนโปรแกรม AutoLISP


รูปแบบการเขียนโปรแกรม AutoLISP
      การเขียนโปรแกรม AutoLISP ขึ้นมาใช้งานบน AutoCAD ถือได้ว่าเป็นการสร้างฟังก์ชั่นใหม่ขึ้นมา ซึ่งในการเขียนโปรแกรม AutoLISP ขึ้นมาใหม่นั้น จะต้องมีการกำหนดให้เป็นฟังก์ชั่นเสียก่อน โดยการ
      DEFUN ซึ่งย่อมาจาก DEfine FUNction ลักษณะการกำหนดรูปแบบดังนี้
      (DEFUN C:FUNCNAME (Argument)
            (Expression)
            (Expression)
            (Expression)
                  .
                  .
                  .
      )
      เราจะสังเกตได้ว่า จำนวนวงเล็บเปิด และวงเล็บปิด จะสมดุลกัน และใน AutoLISP จะถือว่าการใช้อักษรตัวใหญ่ หรืออักษรตัวเล็กมีค่าเหมือนกัน
      C: เป็นตัวเลือก จะมีหรือไม่มีก็ได้ ถ้ามี แล้วฟังก์ชั่นนั้นสามารถเรียกใช้งานได้เลยทาง Command line ได้เลย เช่นเดียวกันกับคำสั่งของ AutoCAD โดยทั่วไป แต่ ถ้าไม่มี แล้ว การเรียกใช้จะต้องเรียกในลักษณะฟังก์ชั่น หรือกำหนดให้ฟังก์ชั่นอื่นเรียกใช้งานอีกที
      FUNCNAME คือชื่อของฟังก์ชั่นที่เราจะสร้างขึ้นมาใหม่ จะต้องไม่ซ้ำกับชื่อฟังก์ชั่นที่มีอยู่แล้ว
      Argument เป็นรายการตัวแปรที่จะเป็นสะพานเชื่อมไปยังฟังก์ชั่นตัวอื่น ซึ่งจะมีหรือไม่มีก็ได้ แต่ถ้าเราใส่ Argument ลงไปก็จะมีการส่งค่าไปยังฟังก์ชั่นอื่นได้ เหมาะสำหรับการเขียนแยกทีละโมดูล หลาย ๆ โมดูล
      Expression เป็นรายการคำสั่งที่เราเขียนขึ้นมาให้ AutoCAD ทำงานตามขั้นตอนต่าง ๆ ที่เรากำหนดไว้
      เราสามารถสรุปรวบรวมรูปแบบการ DEFUN ได้ดังต่อไปนี้
1.     (DEFUN  FUNCNAME ( ) . . . . . )
      ตัวแปรทั้งหมดเป็น Global Variable
2.     (DEFUN  FUNCNAME ( / a b ) . . . . . )
      a และ b เป็น Local Variable
3.     (DEFUN  FUNCNAME ( c ) . . . . . )
      c เป็น Leading Variable
4.    (DEFUN  C:FUNCNAME ( ) . . . . . )
      เราสามารถเรียกใช้ FUNCNAME ได้เลยทาง Command line
ในการเขียนโปรแกรม AutoLISP ขึ้นมานั้น เราจะใช้โปรแกรมจำพวก Text Editor ในการสร้างโปแกรมขึ้นมาในรูปแบบของ Text File และต้องบันทึกนามสกุล .LSP เสมอ โปรแกรมจำพวก Text Editor ที่เราเลือกมาใช้ในการเขียนโปรแกรม AutoLISP นี้ ควรเลือกใช้ให้เหมาะสม ควรเป็นโปรแกรมที่มีขนาดเล็ก ใช้งานง่ายและไม่เสียเวลาในการเรียกใช้งานมากนัก เพราะในทางปฏิบัติแล้ว เราจะต้องทำการแก้ไขโปรแกรม สลับไปกับการทดสอบรันโปรแกรม อยู่ตลอดเวลา อย่างหลีกเลี่ยงไม่ได้

Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP

นิพจน์ (Expression)


นิพจน์ (Expression)
      นิพจน์จะเป็นกลุ่มของชุดคำสั่ง ซึ่งเป็นการนำเอา ฟังก์ชั่น อาร์กิวเมนต์ หรือเครื่องหมายดำเนินการต่าง ๆ เข้ามาประมวลผลเข้าด้วยกันให้ได้ผลลัพธ์ใหม่ เช่น

           ( +  A  10 ) = นิพจน์
             |   |__|___อาร์กิวเมนต์
             |_______ฟังก์ชั่น
          ดังนั้นในโปรแกรม AtuoLISP แต่ละโปรแกรมจะประกอบด้วยนิพจน์ จำนวนหลาย ๆ นิพจน์ที่ประกอบกันขึ้นมา และการสร้างนิพจน์ขึ้นมาจะต้องเป็นไปตามกฎเกณฑ์การสร้างนิพจน์ ดังนี้
1. ทุก ๆ นิพจน์ ไม่ว่าจะมี อาร์กิวเมนต์ หรือไม่ก็ตาม จะต้องขึ้นต้นด้วยเครื่องหมายวงเล็บเปิด ( ก่อน และปิดท้ายด้วยเครื่องหมายวงเล็บปิด ) เมื่อจบนิพจน์เสมอ
2. จำนวนเครื่องหมายวงเล็บเปิด จะต้องเท่ากับวงเล็บปิดเสมอ ไม่ว่าจะซ้อนกันกี่นิพจน์ก็ตาม
3. ในกรณีที่มีนิพจน์ซ้อนกันมากกว่า 1 นิพจน์ AutoLISP จะทำการประมวลผลวงเล็บในสุดก่อน แล้วจึงประมวลผลวงเล็บนอกที่ถัดออกมาเรื่อย ๆ จนจบนินพจน์กลุ่มนั้น
4. จะต้องเว้นช่องว่าง 1 อักษร ระหว่าง ฟังก์ชั่นและอาร์กิวเมนต์เสมอ
5. นิพจน์ที่มีการประมวลผลหรือรับข้อมูลจากภายนอก เช่น คีย์บอร์ด, เมาส์ หรืออุปกรณ์ช่วยอื่น ๆ อาจจะมีค่าหรือไม่มีค่าก็ได้ ถ้าไม่มีค่าถือว่าเป็น nil หรือถ้ามีค่าถือว่าเป็น T (True)





Cr. กรมส่งเสริมอุตสาหกรรม – พื้นฐานการเขียนโปรแกรม AutoLISP