Đến nội dung


Hình ảnh
- - - - -

[Đã xong] lisp-Làm thế nào để tìm số đối tượng sinh ra bởi lệnh Boundary


  • Please log in to reply
22 replies to this topic

#21 hoangkimoanh

hoangkimoanh

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 05 August 2014 - 11:13 AM

:(


  • 0

#22 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 05 August 2014 - 11:27 AM

Mình xuống dòng hộ bạn cái lisp bạn quote, và nhìn code chẳng thấy chỗ nào liên quan đến diện tích cả :)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.c...-lenh-boundary/
(defun c:gb(/ po frome toe cur ss st LA CA)
(setq po (getpoint "\n Pick diem :"))
(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary
(command "boundary" "A" "O" "R" "" po "") ;; Region
(setq toe (entlast)) ;; chon doi tuong cuoi cung sau khi Region
(setq cur frome ; khoi taoss 
ss (ssadd))
(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
	(setqcur (entnext cur)ss (ssadd cur ss)))
(setq st (ss2ent ss))
(setq LA (car st))
(setq CA (ssdel LA ss))
(Command "subtract" LA "" CA "")
(princ))
;;
(defun ss2ent (ss / sodt index lstent)(setqsodt (if ss (sslength ss) 0)index 0)(repeat sodt(setq ent (ssname ss index)index (1+ index)lstent (cons ent lstent)))(reverse lstent))

  • 2

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#23 hoangkimoanh

hoangkimoanh

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 06 August 2014 - 09:24 AM

Đầu tiên, em xin chân thành cảm ơn bác tdvn và bác Nguyen Hoanh đã trợ giúp cho em.
Lisp của bác Hoành chạy OK. Em đã vận dụng cái Lisp của bác vào việc tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.
Lisp đã chạy OK. Nhưng trước khi chạy ra kết quả (hiện ra hộp thoại AutoCAD mesage) thì nó lại hiện ra hộp thoại Question, em phải ấn No. Và số lần em ấn No bằng với số đối tượng do lệnh Boundary tạo ra. Thiết nghĩ nguyên nhân này do lỗi vòng lặp mà em chưa biết lỗi do đâu bác Hoành ạ. Bác và mọi người trên diễn đàn có thể giải thích dùm Tue_NV nguyên nhân được không?
Đây là hình ảnh của hộp thoại question :
question.jpg
Còn đây là đoạn Code mà Tue_NV viết để tính tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.

(defun c:gb()
(setq frome (entlast));; chon doi tuong cuoi cung truoc khi boundary
(command ".boundary" pause "");; boundary
(setq toe (entlast));; chon doi tuong cuoi cung sau khi boundary

(setq cur frome; khoi tao
ss (ssadd)
S 0
)
(while (not (eq cur toe));; chon cac doi tuong tu frome den toe
(setq
cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq t (getvar "area"))
(setq S (+ S t))
)
(command "area" "A" "O" "L" "" "")
(setq t (getvar "area"))
(setq S (+ S (* t 2))) 

(alert (strcat "Area = " (rtos S 2 2)))

(Princ)
)
Cảm ơn mọi người thật nhiều

em xin lỗi vì bài viết trước, bài này của anh TUE mới đúng. em muốn khi pick vào đối tượng cần tính diện tích là hình đa giác kín bị khoét lỗ thì hiện lên đường bao màu đỏ tạm thời và xóa đi sau khi kết thúc lệnh (để mình biết nó bao có đúng không) kết quả diện tích cho mình ED vào Text có sẵn


  • 0