Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

Em Ko Biết Lệnh Tắt Để Gọi 1 Lisp Lên


  • Please log in to reply
1 reply to this topic

#1 khangl2001

khangl2001

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 14 February 2017 - 08:24 PM

em có 1 lisp ứng dụng như sau, nó là để đo chiều dài của 1 layer mà em ko biết gọi lệnh tắt ra sao. do em ko biết đọc mã code. Mong anh em giúp đỡ.

và chỉ luôn em cách nhận biết đâu là dòng gọi lệnh tắt trong mã code đó với. ( ví dụ như begin..x.)

(defun c:zone ( / ssl aret pert)
(princ "\nPick any object on the required layer\n")
(setq ssl (ssget))
(if (= ssl nil)(princ "\n*** Nothing was selected! ***\n\n")
(progn
(setq lay (cdr (assoc 8 (entget (ssname ssl 0)))))
(setq ssl (ssget "X" (list (cons 8 lay))))
(princ (strcat "\nLayer " lay " selected"))
(initget "Length Area")
(setq res (getkword "\nWould you like to measure Length/<Area> : "))
(if (= res "Length")(mlen)(meas))
);end progn
);end if
(princ)
);END ZONE
(defun meas ()
(setq len (sslength ssl))
(setq alen (sslength ssl))
(setq aret 0)
(setq count 0)
(setq nop 0)
(setq ope 0)
(while (/= len count)
(setq pnt (ssname ssl count))
(setq ple (cdr (assoc 0 (entget pnt))))
(if (and (/= ple "LWPOLYLINE")(/= ple "POLYLINE"))
(progn
(setq nop (+ 1 nop))
(setq alen (- alen 1))
(princ "\nNon polyline filtered\n")
);END PROGN
(progn
(setq plc (cdr (assoc 70 (entget pnt))))
(if (= plc 0)
(progn
(setq ope (+ 1 ope))
(princ "\nWarning! *** Polyline is not closed\n")
);END PROGN
);END IF
(command "area" "e" pnt)
(setq are (getvar "area"))
(setq aret (+ are aret))
);END PROGN
);END IF
(setq count (+ count 1))
);END WHILE
(if (= nop 0)(princ "\nAll selected objects were polylines")(princ (strcat "\n" (itoa nop) " non polyline objects were filtered")))
(if (= ope 0)(princ "\nAll polylines were closed")(princ (strcat "\n" (itoa ope) " polylines were not closed")))
(princ (strcat "\nTotal area for layer " lay " = " (rtos aret 2 2) " in " (itoa alen) " polylines"))
(princ)
);END MEAS
(defun mlen ()
(setq len (sslength ssl))
(setq alen (sslength ssl))
(setq pert 0)
(setq count 0)
(setq nop 0)
(while (/= len count)
(setq pnt (ssname ssl count))
(setq ple (cdr (assoc 0 (entget pnt))))
(if (and (/= ple "LWPOLYLINE")(/= ple "POLYLINE"))
(progn
(setq nop (+ 1 nop))
(setq alen (- alen 1))
(princ "\nNon polyline filtered\n")
);END PROGN
(progn
(command "area" "e" pnt)
(setq per (getvar "perimeter"))
(setq pert (+ per pert))
);END PROGN
);END IF
(setq count (+ count 1))
);END WHILE
(if (= nop 0)(princ "\nAll selected objects were polylines")(princ (strcat "\n" (itoa nop) " non polyline objects were filtered")))
(princ (strcat "\nTotal length for layer " lay " = " (rtos pert 2 2) " in " (itoa alen) " polylines" ))
(princ)
);END MLEN

  • 0

#2 Danh Cong

Danh Cong

    biết dimangular

  • Members
  • PipPipPipPipPip
  • 342 Bài viết
Điểm đánh giá: 69 (tàm tạm)

Đã gửi 15 February 2017 - 08:15 AM

em có 1 lisp ứng dụng như sau, nó là để đo chiều dài của 1 layer mà em ko biết gọi lệnh tắt ra sao. do em ko biết đọc mã code. Mong anh em giúp đỡ.

và chỉ luôn em cách nhận biết đâu là dòng gọi lệnh tắt trong mã code đó với. ( ví dụ như begin..x.)

(defun c:zone ( / ssl aret pert)
...................

 

 

Tìm trong lisp cú pháp : (defun c:###  

+ ### là lệnh tắt để gọi lisp đó. Ví dụ với lisp trên của bạn, lệnh tắt là "Zone"


  • 1

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***