Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
Tue_NV

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

Các bài được khuyến nghị

Tue_NV    3.841

Tue_NV có một vấn đề mong các bác trên diễn đàn giúp đỡ.

Mình đã có một bài viết về tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.

Tức là có một đa giác bị khoét n đa giác bên trong.

Bài viết đó ở đây : lisp tính diện tích 1 hình vẽ kín mà mình chỉ cần pick

Số lượng đa giác mẹ và n đa giác khoét lỗ bên trong tạo bởi lệnh boundary.

Đây là đoạn Code tính diện tích của đa giác mẹ bị khoét lỗ bởi n đa giác con :

(defun C:ARE()
(setq p (getpoint "\nPick a internal point:"))
(command "boundary" p "" "Y")
(setq n (getint "\n So luong hinh khoet rong :") i 0 S 0)

(if (= n 0)
(progn
(command "boundary" p "" "Y")
(command "area" "o" (entlast))
(setq
S (getvar "area")
Pe (getvar "perimeter")
)
(command "erase" (entlast) "")
(alert (strcat "Area = " (rtos S)))
)
)
(if (> n 0)
(progn
(setq ela (entlast))
(setq entla (entget ela))
(command "erase" ela "")


(while (
(setq ela1 (entlast))
(command "area" "S" "O" ela1 "" "")
(Command "erase" "L" "")
(setq t (getvar "area"))
(setq S (+ S t))
(setq i (+ i 1))
)

(entmake entla)


(command "area" "A" "O" "L" "" "")

(setq tr (getvar "area"))

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

(Princ)
)

Làm sao để tìm số đối tượng đa tuyến tạo bởi lệnh boundary?

Mong các bác trợ giúp cho Tue_NV

Cảm ơn các bác thật nhiều.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tdvn    53
Tue_NV có một vấn đề mong các bác trên diễn đàn giúp đỡ.

 

Làm sao để tìm số đối tượng đa tuyến tạo bởi lệnh boundary?

Mong các bác trợ giúp cho Tue_NV

Cảm ơn các bác thật nhiều.

Mình chưa nghiên cứu lisp của bạn. nhưng để tìm số lượng đối tượng được tạo bởi boundary. bạn có thể làm như sau :

Trước khi dùng lệnh boundary. Bạn cho nhớ đối tượng cuối cùng và một biến. Ví dụ (setq n1 (entlast))

Sau khi dùng lệnh boundary, bạn lại nhớ đối tượng cuối cùng (setq n2 (entlast))

Sau đó bạn lập vòng lặp để lấy đối tượng tiếp theo của n1 (ví dụ ni). cho đến lúc nào ni bằng n2. Ví dụ

(While (not (equal (setq ni (entnext n1)) n2))

...

(setq n1 ni)

)

Mình chi đưa ra ý tưởng, chưa viết thành lisp. bạn làm tiếp nhé

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nguyen Hoanh    4.524

chi tiết code như sau:

(defun c:gb( / ss from to cur)
 (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)
 )
 (while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
   (setq
     cur (entnext cur)
     ss (ssadd cur ss)
    )
  )

 (sssetfirst ss ss)  ;; highlight ket qua
 (princ)
)

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
chi tiết code như sau:

(defun c:gb( / ss from to cur)
 (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)
 )
 (while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
   (setq
     cur (entnext cur)
     ss (ssadd cur ss)
    )
  )

 (sssetfirst ss ss)  ;; highlight ket qua
 (princ)
)

Đầ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

  • Vote tăng 5

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nguyen Hoanh    4.524

Bạn bị lỗi tại dòng: (setq t (getvar "area"))

 

Bạn để ý rằng t trong ngôn ngữ autolisp là một hằng số. Bạn sửa tên biến t thành tt hoặc gì gì đó là được.

 

Ngay trong dòng thông báo:

Gán biến được bảo vệ:
T
Có thoát khỏi vòng lặp không?

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Bạn bị lỗi tại dòng: (setq t (getvar "area"))

 

Bạn để ý rằng t trong ngôn ngữ autolisp là một hằng số. Bạn sửa tên biến t thành tt hoặc gì gì đó là được.

 

Ngay trong dòng thông báo:

Gán biến được bảo vệ:
T
Có thoát khỏi vòng lặp không?

Thành công rồi bác Hoành ạ. Chạy OK rồi. Vậy là mình đã viết được đoạn Lisp tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.

Bác Hoành cho em hỏi luôn là : t trong ngôn ngữ autolisp là một hằng số. Vậy hằng số t bằng bao nhiêu vậy ạ?

Và cho em hỏi thêm một chút nữa là trong đoạn Code của bác :

(defun c:gb( / ss from to cur)

(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary

(command ".boundary" pause "") ;; boundary

(setq toe (entlast))

....

Đoạn định nghĩa hàm : biến riêng là from và biến to : (defun c:gb( / ss from to cur)

Khi khởi tạo biến lại là biến frome và bién toe?

em chưa hiểu.

Bác giải thích dùm em tí chút được không?

Cảm ơn bác

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Nguyen Hoanh    4.524

Chắc nhờ bác Ssg giải thích thì sư phạm hơn, bạn dễ hiểu hơn. Xin lý giải sơ bộ cho bạn hiểu trước, mong bác Ssg giải thích thêm.

 

1. Hằng số t thuộc kiểu biến đúng sai, kiểu này có 2 giá trị: t là đúng, nil là sai. (Tất nhiên, nil còn có nghĩa là rỗng trong các trường hợp khác).

 

2. Các số sau dấu ngoặc là biến cục bộ. Bạn xem đoạn code sau:

(defun ham1(/a) (setq a 4))
(defun ham2() (setq a 4))

(setq a 3); gan bien toan cuc a ve gia tri 3
(ham1)
(princ a); gia tri a van la 3

(setq a 5) ; gan bien toan cuc a ve gia tri 5
(ham2)
(princ a); gia tri a hien nay la 4

 

Bạn sẽ thấy ham1 không làm thay đổi giá trị a toàn cục. còn ham2 thì làm thay đổi biến a toàn cục.

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
Thành công rồi bác Hoành ạ. Chạy OK rồi. Vậy là mình đã viết được đoạn Lisp tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.

Bác Hoành cho em hỏi luôn là : t trong ngôn ngữ autolisp là một hằng số. Vậy hằng số t bằng bao nhiêu vậy ạ?

Và cho em hỏi thêm một chút nữa là trong đoạn Code của bác :

(defun c:gb( / ss from to cur)

(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary

(command ".boundary" pause "") ;; boundary

(setq toe (entlast))

....

Đoạn định nghĩa hàm : biến riêng là from và biến to : (defun c:gb( / ss from to cur)

Khi khởi tạo biến lại là biến frome và bién toe?

em chưa hiểu.

Bác giải thích dùm em tí chút được không?

Cảm ơn bác

Chào bác Tue_NV,

T nghĩa là true, một hằng số logic luôn nhận giá trị là true bác Tue_NV ạ. Vì vậy trong quá trình tạo lisp cần cố gắng tránh đặt tên biến là T bác ạ.

 

Còn về biến to và toe trong đoạn líp của bác Hoành, có lẽ bác ấy nhầm nhưng thực ra nó không ảnh hưởng gì vì biến to được khai báo là biến cục bộ, còn biến toe không khai báo có nghĩa là một biến toàn cục. Thực tế biến to trong đoạn líp trên không hề xuất hiện và nếu có xuất hiện cũng sẽ bị trả về nil sau khi líp chạy xong. Còn biến toe do là biến toàn cục nên sau khi chạy líp nó vẫn giữ giá trị cuối cùng mà nó nhận. Bác có thể kiểm tra giá trị này bằng các nhập !toe trên dòng nhắc command của cad.

Chắc bác Hoành định xóa giá trị của biến toe này nên mới định cho nó là biến cục bộ nhưng lại thiếu mất chữ e đây bác Tue_nv ạ. Bác cứ thử đổi to thành toe trong khi khai báo và sau khi chạy líp bác kiểm tra lại theo cách trên sẽ thấy sự khác nhau của nó bác ạ.

 

Chúc bác khỏe và vui.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
daotac541    2

Em xin chào các bác! Em thấy cái lips của bác Tue_NV rất hay. Bác có thể viết cho em cái lisp ( từ cái lisp của bác) với nội dung :

Khi pick chuột vào một miền ( kể cả miền khoét rỗng) thì lips chuyển miền đó thành 1 region (đã trừ miền).

Em xin cảm ơn các bác !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Em xin chào các bác! Em thấy cái lips của bác Tue_NV rất hay. Bác có thể viết cho em cái lisp ( từ cái lisp của bác) với nội dung :

Khi pick chuột vào một miền ( kể cả miền khoét rỗng) thì lips chuyển miền đó thành 1 region (đã trừ miền).

Em xin cảm ơn các bác !

Bạn có thể nói rõ hơn ý của bạn được không?

Nếu có thể, bạn up hình minh hoạ của bạn nhé.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
daotac541    2

Thx bác! em ko biết up vào viết thế nào! Em xin trình bày lại ý của em như sau :

 

-Ban đầu có 1 hình vuông lớn : H1 và 1 hình vuông nhỏ nằm trong hình vuông lớn : H2 ( H2 nằm trong H1)

-Yêu cầu lisp : 1 pick chuột đưa ra được hình H3 = region(H2) - region(H1)

 

Em xin up file kem theo ( vì em ko biết up hình minh họa thế nào)

http://www.cadviet.com/upfiles/region.dwg

Em cảm ơn bác trước !!!!!!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841
Thx bác! em ko biết up vào viết thế nào! Em xin trình bày lại ý của em như sau :

 

-Ban đầu có 1 hình vuông lớn : H1 và 1 hình vuông nhỏ nằm trong hình vuông lớn : H2 ( H2 nằm trong H1)

-Yêu cầu lisp : 1 pick chuột đưa ra được hình H3 = region(H2) - region(H1)

 

Em xin up file kem theo ( vì em ko biết up hình minh họa thế nào)

http://www.cadviet.com/upfiles/region.dwg

Em cảm ơn bác trước !!!!!!!

Hiểu ý của bạn rồi.

Để tạo thành một region ta có 2 cách :

1. Sử dụng lệnh region

2. Sử dụng lệnh Boundary. Khi sử dụng lệnh này thì có thể tạo thành region hoặc Polyline.

- Ta dùng cách 2 để tạo Region

Đây là đoạn Code viết theo ý của bạn : Tạo thành một region từ một đa giác mẹ bị khoét n lỗ bên trong.

Đoạn Lisp cũng đúng với trường hợp đa giác kín không khoét lỗ.

(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 tao
ss (ssadd)
)
(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
(setq
cur (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)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)

Nhân đây, các bác trên diễn đàn cho Tue_NV hỏi là sau khi tạo Region thì Region được tạo ra nằm trùng với những đường Polyline cũ thì làm sao có ta có thể xoá được các Polyline này.

Mong các bác trợ giúp cho Tue_NV.

Cảm ơn các bác rất nhiều.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
haanh    1.586
Nhân đây, các bác trên diễn đàn cho Tue_NV hỏi là sau khi tạo Region thì Region được tạo ra nằm trùng với những đường Polyline cũ thì làm sao có ta có thể xoá được các Polyline này.

Mong các bác trợ giúp cho Tue_NV.

Cảm ơn các bác rất nhiều.

Em ko hiểu ý của anh Tuệ ??? Khi tạo Region từ một hình khép kín vẽ bằng lệnh Line và polyline thì các hình khép kín sẽ bị mất đi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
halen    0
Thành công rồi bác Hoành ạ. Chạy OK rồi. Vậy là mình đã viết được đoạn Lisp tính diện tích của một hình đa giác kín và bị khoét n lỗ ở trong.

Bác Hoành cho em hỏi luôn là : t trong ngôn ngữ autolisp là một hằng số. Vậy hằng số t bằng bao nhiêu vậy ạ?

Và cho em hỏi thêm một chút nữa là trong đoạn Code của bác :

(defun c:gb( / ss from to cur)

(setq frome (entlast)) ;; chon doi tuong cuoi cung truoc khi boundary

(command ".boundary" pause "") ;; boundary

(setq toe (entlast))

....

Đoạn định nghĩa hàm : biến riêng là from và biến to : (defun c:gb( / ss from to cur)

Khi khởi tạo biến lại là biến frome và bién toe?

em chưa hiểu.

Bác giải thích dùm em tí chút được không?

Cảm ơn bác

Anh TueNV có thể sửa giúp em cái lisp của anh theo yêu cầu như thế này không ạh: Có 1 hình kín và bên trong có n hình kín khác, lisp của anh chỉ việc tích vào điểm bên trong, là hiện ra kết quả là một text, và vị trí đặt text do người sử dụng chọn. Và khi tích điểm vào trong hình kín đừng hiện ra thông báo "Số lượng hình khoét rỗng". Xin cảm ơn anh. Như thế thì tiện lợi hơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
cachisa    0

mình là dân ngoại đạo, chỉ vào học mót mấy ae trong cadviet thoi. vì thế mình hay chọc ngoáy vào cad lắm. (bây giờ chuyển hướng vào solit) nên mình nói sai các ae đừng chửi nhé. khi bạn đã copy file gb.lsp rồi thì bạn vao công cụ Tool ->AutoLISP -> loadApp rồi chọn file gb vừa copy. Mình cứ hiểu nôm na là file LSP là file auto (tự động) khi mình load rồi thì nó sẽ tự động làm cho mình những gì mà người lập trình viết công việc cho nó 1 cách chủ động.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Thaistreetz    515

topic nay là để trao đổi thuật toán viết lisp. các bạn không cần dùng các lisp trong topic này làm gì cả. cách sử dụng lisp đã có 1 topic hướng dẫn ngay đầu box này.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Hiểu ý của bạn rồi.

Để tạo thành một region ta có 2 cách :

1. Sử dụng lệnh region

2. Sử dụng lệnh Boundary. Khi sử dụng lệnh này thì có thể tạo thành region hoặc Polyline.

- Ta dùng cách 2 để tạo Region

Đây là đoạn Code viết theo ý của bạn : Tạo thành một region từ một đa giác mẹ bị khoét n lỗ bên trong.

Đoạn Lisp cũng đúng với trường hợp đa giác kín không khoét lỗ.

(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 (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))
Nhân đây, các bác trên diễn đàn cho Tue_NV hỏi là sau khi tạo Region thì Region được tạo ra nằm trùng với những đường Polyline cũ thì làm sao có ta có thể xoá được các Polyline này.

Mong các bác trợ giúp cho Tue_NV.

Cảm ơn các bác rất nhiều.

anh tue ơi, anh sửa giúp em đoạn code trên cho nó ngắt đúng đoạn, không bị tất cả 1 dòng vì những đoạn có dấu ;;;em không biết ngắt đoạn chỗ nào cho đúng nữa! và có thể tính diện tích xong và sửa vào text sẵn có với ạ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.649

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.com/forum/topic/9764-da-xong-lisp-lam-the-nao-de-tim-so-doi-tuong-sinh-ra-boi-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))
  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

Đầ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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×