介紹一下 AutoLISP 程式

阅读更多
有學生問到一個 AutoLISP 程式設計的需求,
這是一個很典型的 AutoLISP 題目,非常適合用來教學,
所以,把它 po 在這邊分享。
程式裡面已經有詳細的注解,他的目的是 讓使用者在
AutoCAD 裡面選擇一些圖元,這個程式會幫他加總線段的
總長度,大家 欣賞欣賞。

cpp 代码
  1. ; file: sum-01.LSP   
  2.   
  3. ; (cal-dist p1 p2)   
  4. (defun cal-dist(p1 p2 / x1 x2 y1 y2 dx dy)   
  5.   (setq x1 (car p1) x2 (car p2)   
  6.     y1 (cadr p1) y2 (cadr p2))   
  7.   (setq dx (- x2 x1) dy (- y2 y1))   
  8.   
  9.   (eval (sqrt (+ (* dx dx) (* dy dy))))   
  10.   ); end of cal-dist()   
  11. ; -----------------------------------------------   
  12.   
  13. (defun c:sum-line( / s1 l1 p1 p2)   
  14.   (princ "\nSelect some LINEs: ")   
  15.   (setq s1 (ssget))   
  16.   (setq l1 (sslength s1))   
  17.   
  18.   ; for i=0 to (i < l1) do ...   
  19.   (setq i 0 l2 0 sum1 0.0)   
  20.   (while (< i l1)   
  21.     (setq e1 (ssname s1 i)); get ent. name   
  22.     (setq et1 (entget e1)); get ent. content   
  23.   
  24.     (setq str1 (cdr (assoc 0 et1)) ); get ent. type, LINE or CIRCLE   
  25.     (if (eq str1 "LINE")   
  26.       (progn   
  27.     (setq p1 (cdr (assoc 10 et1)))   
  28.     (setq p2 (cdr (assoc 11 et1)))   
  29.     (setq sum1 (+ sum1 (cal-dist p1 p2)))   
  30.        
  31.         (setq l2 (1+ l2))   
  32.     ); end progn   
  33.       ); end if  
  34.   
  35.     (setq i (1+ i))   
  36.     ); end of while  
  37.   
  38.   (princ (strcat "\nNumber of LINEs be sumed: " (itoa l2) "\n"))   
  39.   (princ (strcat "Total length= " (rtos sum1 2 6 ) "\n" ))   
  40.      
  41.   (princ)   
  42.   ); end of sum-line()   
  43. ; end of file   

你可能感兴趣的:(编程,FP,Fortran,Pascal,LISP)