Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ndn386

Lisp tính diện tích

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

Em có ví dụ như sau http://www.cadviet.com/upfiles/2/vidu2.jpg

Cho em hỏi là các bác có thể giúp em viết 1 cái lisp tính diện tích phần gạch chéo không ạ?

Bác Tue_NV đã chỉ giúp em cách tính bằng lệnh Area nhưng tính như thế thì lâu quá, em muốn nhờ mọi nguời viết giúp em 1 cái lisp mà chỉ cần tích vào phần gạch chéo là có thể cho ra đuợc kết quả diện tích

Em xin cảm ơn mọi ngườ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
Em có ví dụ như sau http://www.cadviet.com/upfiles/2/vidu2.jpg

Cho em hỏi là các bác có thể giúp em viết 1 cái lisp tính diện tích phần gạch chéo không ạ?

Bác Tue_NV đã chỉ giúp em cách tính bằng lệnh Area nhưng tính như thế thì lâu quá, em muốn nhờ mọi nguời viết giúp em 1 cái lisp mà chỉ cần tích vào phần gạch chéo là có thể cho ra đuợc kết quả diện tích

Em xin cảm ơn mọi người.

Bạn có sẵn Hatch, làm thử cách của Hà Anh xem được không?

Chỉ có cách tính hơi thủ công một chút:

Dùng lệnh Hachth , tạo ra một mặt cắt > Chọn đối tượng là mặt cắt đó > gõ Li > Sẽ biết được diện tích mặt cắt

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
Em có ví dụ như sau http://www.cadviet.com/upfiles/2/vidu2.jpg

Cho em hỏi là các bác có thể giúp em viết 1 cái lisp tính diện tích phần gạch chéo không ạ?

Bác Tue_NV đã chỉ giúp em cách tính bằng lệnh Area nhưng tính như thế thì lâu quá, em muốn nhờ mọi nguời viết giúp em 1 cái lisp mà chỉ cần tích vào phần gạch chéo là có thể cho ra đuợc kết quả diện tích

Em xin cảm ơn mọi người.

Vấn đề này Tue_NV đã có viết Lisp rồi

Lisp tinhdien tich hinh kin bi khoet n lo ben trong - Bai viet so 4 - bai viet so 6

  • 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

Em hỏi anh Tuệ, lisp của anh có tính diện tích được nhiều hình kín khoét lỗ được không?

Nếu chỉ tính 1 hình thì cách của chị Hà Anh đỡ tốn nhanh hơn. Đầu óc thanh thoát nhẹ nhàng hơn đỡ phải nhớ xem lisp đó phải đánh chữ "jí", đỡ hại nơtron thần kinh!

Còn với hình chưa có hatch dùng lệnh BO > LI .

Giao tiếp bằng chữ không lời

Ha Anh (6/7/2009 9:59:55 AM): tại sao không khai thác hết tiềm năng của CAD, dùng lệnh ít nhất vẽ với năng suất cao nhất

Ha Anh (6/7/2009 10:01:16 AM): cha ông ta ngày xưa còn dùng cuốc xẻng thậm chí dùng cả tay ko để đánh lại tàu bay của giặc pháp !

tue_nvcc (6/7/2009 10:02:30 AM): tại sao ta ko dùng cuốc xèng để đánh máy vi tính

Mong anh Tuệ "hỉu iem" "hok pại" dị ứng với lisp đâu nhé, nhưng em dùng có chọn lựa, cái nào "hok thỉa" lạm dụng. "Giúng" như "uốn dị" ít thì có lợi cho sức khoẻ bản thân người uống, nhiều thì có lợi cho...bác sĩ !

  • 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
Em hỏi anh Tuệ, lisp của anh có tính diện tích được nhiều hình kín khoét lỗ được không?

Nếu chỉ tính 1 hình thì cách của chị Hà Anh đỡ tốn nhanh hơn. Đầu óc thanh thoát nhẹ nhàng hơn đỡ phải nhớ xem lisp đó phải đánh chữ "jí", đỡ hại nơtron thần kinh!

 

Mong anh Tuệ "hỉu iem" "hok pại" dị ứng với lisp đâu nhé, nhưng em dùng có chọn lựa, cái nào "hok thỉa" lạm dụng. "Giúng" như "uốn dị" ít thì có lợi cho sức khoẻ bản thân người uống, nhiều thì có lợi cho...bác sĩ !

:cheers: :cheers:

Cảm ơn huong259 rất nhiều. Một ý kiến rất hay.

 

Lisp của mình chỉ tính được có 1 hình khoét lỗ thôi chứ chưa áp dụng cho nhiều hình có khoét lỗ.

Để Tue_NV khi nào rãnh thử viết xem cái Lisp tính diện tích áp dụng cho nhiều hình có khoét lỗ thử nhé.

Không biết có thành công không nữa nhưng cũng sẽ cố gắng để giúp cho các bạn.

Sao hôm nay huong259 sử dụng ngôn ngữ của "Xì tin". LẠ nhỉ? :cheers:

  • 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
:cheers: :cheers:

Cảm ơn huong259 rất nhiều. Một ý kiến rất hay.

 

Lisp của mình chỉ tính được có 1 hình khoét lỗ thôi chứ chưa áp dụng cho nhiều hình có khoét lỗ.

Để Tue_NV khi nào rãnh thử viết xem cái Lisp tính diện tích áp dụng cho nhiều hình có khoét lỗ thử nhé.

Không biết có thành công không nữa nhưng cũng sẽ cố gắng để giúp cho các bạn.

Sao hôm nay huong259 sử dụng ngôn ngữ của "Xì tin". LẠ nhỉ? :cheers:

"Í củ iem" là lisp tính được diện tích của nhiều hình khoét một lỗ thì năng suât mới cao. Nếu anh có thời gian rảnh viết lisp để tích được diện tích nhiều hình khác nhau, mỗi hình lại có nhiều lỗ khác nhau. Em sẽ hậu đãi, cám ơn anh nhiều lắm!

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

Cảm ơn anh Tue_NV nhiều nhé, nhưng em muốn hỏi là kết quả cho ra chỉ lấy 2 số sau dấu phẩy, vậy nếu em muốn lấy 3 số sau dấu phẩy thì anh có thể sửa lại 1 chút giúp em đuợc không ạ? E chỉ còn vuớng mỗi chỗ đó thôi mong anh giúp em với nhé

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
Bạn có sẵn Hatch, làm thử cách của Hà Anh xem được không?

Vì số lượng hình cần tính của em rất nhiều (hơn 1000 mặt cắt) nên việc Hatch cũng khá lâ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
"Í củ iem" là lisp tính được diện tích của nhiều hình khoét một lỗ thì năng suât mới cao. Nếu anh có thời gian rảnh viết lisp để tích được diện tích nhiều hình khác nhau, mỗi hình lại có nhiều lỗ khác nhau. Em sẽ hậu đãi, cám ơn anh nhiều lắm!

Chào bạn huong259 và bạn ndn386

Đây là Lisp viết theo ý của bạn huong259.

Lisp tính diện tích nhiều hình khác nhau, mỗi hình lại có nhiều lỗ khác nhau. Đúng luôn cho trường hợp không có lỗ. Vì không có lỗ thì diện tích lỗ bằng 0. :cheers:

Đây là code. Các Bạn thử nhé :

(defun c:gb(/ p ss S frome cur toe tt)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :") 
ss (ssadd) S 0)
(while p
(setq frome (entlast))
(command ".boundary" p "")
(setq toe (entlast));; 
(setq cur frome
)
   (while (not (eq cur toe))
(setq cur (entnext cur)
	ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq tt (getvar "area"))
(setq S (+ S tt))
    )
 (command "area" "A" "O" "L" "" "")
 (setq tt (getvar "area"))
 (setq S (+ S (* tt 2))) 
(sssetfirst ss ss)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :"))

)
(if (> (sslength ss) 0)
(alert (strcat "Area = " (rtos S 2 2)))
(alert "\n Ban chua Pick vao mien kin nao ca ")
)
(command "erase" ss "")
(Princ)
)

@ ndn386 : Bạn muốn thêm 3 chữ số thập phân thì thay dòng này

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

thành dòng :

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

thay số 2 thành số 3 : chính là chữ số thập phân đó bạn

  • 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
Chào bạn huong259 và bạn ndn386

Đây là Lisp viết theo ý của bạn huong259.

Lisp tính diện tích nhiều hình khác nhau, mỗi hình lại có nhiều lỗ khác nhau. Đúng luôn cho trường hợp không có lỗ. Vì không có lỗ thì diện tích lỗ bằng 0. :cheers:

Đây là code. Các Bạn thử nhé :

(defun c:gb(/ p ss S frome cur toe tt)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :") 
ss (ssadd) S 0)
(while p
(setq frome (entlast))
(command ".boundary" p "")
(setq toe (entlast));; 
(setq cur frome
)
   (while (not (eq cur toe))
(setq cur (entnext cur)
	ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq tt (getvar "area"))
(setq S (+ S tt))
    )
 (command "area" "A" "O" "L" "" "")
 (setq tt (getvar "area"))
 (setq S (+ S (* tt 2))) 
(sssetfirst ss ss)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :"))

)
(if (> (sslength ss) 0)
(alert (strcat "Area = " (rtos S 2 2)))
(alert "\n Ban chua Pick vao mien kin nao ca ")
)
(command "erase" ss "")
(Princ)
)

@ ndn386 : Bạn muốn thêm 3 chữ số thập phân thì thay dòng này

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

thành dòng :

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

thay số 2 thành số 3 : chính là chữ số thập phân đó bạn

Anh Tue_NV oi, cai lisp này chỉ tính diện tích cho hình khoét lỗ, nhưng em muốn tính diện tích phần giao của 2 hình thì không đuợc nó thông báo là "; error: Function cancelled

Polyline boundary could not be derived. Create Region? "

Hay là cái lisp này không phải giải quyết bài toán đó nhỉ?

Cảm ơn anh em đã làm cho ra kết quả 3 số sau dấu phẩy rồi anh ạ.

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
Anh Tue_NV oi, cai lisp này chỉ tính diện tích cho hình khoét lỗ, nhưng em muốn tính diện tích phần giao của 2 hình thì không đuợc nó thông báo là "; error: Function cancelled

Polyline boundary could not be derived. Create Region? "

Hay là cái lisp này không phải giải quyết bài toán đó nhỉ?

Cảm ơn anh em đã làm cho ra kết quả 3 số sau dấu phẩy rồi anh ạ.

Thực ra Lisp đã giải bài toán đó rồi. Chỉ cần chỉnh lại 1 chút cho phù hợp mà thôi.

ndn386 thử lại code này xem nhé :

(defun c:gb(/ p ss S frome cur toe tt)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :") 
ss (ssadd) S 0)
(while p
(setq frome (entlast))
(command ".boundary" "A" "O" "R" "" p "")
(setq toe (entlast));; 
(setq cur frome
)
(while (not (eq cur toe))
(setq cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq tt (getvar "area"))
(setq S (+ S tt))
)
(command "area" "A" "O" "L" "" "")
(setq tt (getvar "area"))
(setq S (+ S (* tt 2))) 
(sssetfirst ss ss)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin / An phim bat ki de xem ket qua:"))

)
(if (> (sslength ss) 0)
(alert (strcat "Area = " (rtos (abs S) 2 2)))
(alert "\n Ban chua Pick vao mien kin nao ca ")
)
(command "erase" ss "")
(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
Thực ra Lisp đã giải bài toán đó rồi. Chỉ cần chỉnh lại 1 chút cho phù hợp mà thôi.

ndn386 thử lại code này xem nhé :

(defun c:gb(/ p ss S frome cur toe tt)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :") 
ss (ssadd) S 0)
(while p
(setq frome (entlast))
(command ".boundary" "A" "O" "R" "" p "")
(setq toe (entlast));; 
(setq cur frome
)
(while (not (eq cur toe))
(setq cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq tt (getvar "area"))
(setq S (+ S tt))
)
(command "area" "A" "O" "L" "" "")
(setq tt (getvar "area"))
(setq S (+ S (* tt 2))) 
(sssetfirst ss ss)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin / An phim bat ki de xem ket qua:"))

)
(if (> (sslength ss) 0)
(alert (strcat "Area = " (rtos (abs S) 2 2)))
(alert "\n Ban chua Pick vao mien kin nao ca ")
)
(command "erase" ss "")
(Princ)
)

Theo em nghĩ nên có 1,2 tính năng thêm nữa. Đầu tiên có lẽ là việc gán giá trị diên tích vào text trên màn hình, 2 là việc lựa chọn đưn vị diện tích( chỉ làm 1 lần đối với 1 bản vẽ mở ra), 3 là 1 việc hơi khó, e thấy trên mạng có lisp tính diện tích xong rồi tự cập nhật diện tích theo hình (Từ trang này :http://www.offshore-lisp.com/download1/text.html

), bác nào xem hoàn thiện theo lisp này sẽ rất hay.

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
Thực ra Lisp đã giải bài toán đó rồi. Chỉ cần chỉnh lại 1 chút cho phù hợp mà thôi.

ndn386 thử lại code này xem nhé :

(defun c:gb(/ p ss S frome cur toe tt)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :") 
ss (ssadd) S 0)
(while p
(setq frome (entlast))
(command ".boundary" "A" "O" "R" "" p "")
(setq toe (entlast));; 
(setq cur frome
)
(while (not (eq cur toe))
(setq cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq tt (getvar "area"))
(setq S (+ S tt))
)
(command "area" "A" "O" "L" "" "")
(setq tt (getvar "area"))
(setq S (+ S (* tt 2))) 
(sssetfirst ss ss)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin / An phim bat ki de xem ket qua:"))

)
(if (> (sslength ss) 0)
(alert (strcat "Area = " (rtos (abs S) 2 2)))
(alert "\n Ban chua Pick vao mien kin nao ca ")
)
(command "erase" ss "")
(Princ)
)

Cảm ơn anh Tue_NV bài toán của em đã được giải quyết rồi. Cảm ơn anh nhiều lắm

  • 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
Vào lúc 18/1/2010 tại 09:52, Tue_NV đã nói:

Thực ra Lisp đã giải bài toán đó rồi. Chỉ cần chỉnh lại 1 chút cho phù hợp mà thôi.

ndn386 thử lại code này xem nhé :

 


(defun c:gb(/ p ss S frome cur toe tt)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin :") 
ss (ssadd) S 0)
(while p
(setq frome (entlast))
(command ".boundary" "A" "O" "R" "" p "")
(setq toe (entlast));; 
(setq cur frome
)
(while (not (eq cur toe))
(setq cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq tt (getvar "area"))
(setq S (+ S tt))
)
(command "area" "A" "O" "L" "" "")
(setq tt (getvar "area"))
(setq S (+ S (* tt 2))) 
(sssetfirst ss ss)
(setq p (getpoint "\n Pick 1 diem vao mien trong hinh kin / An phim bat ki de xem ket qua:"))

)
(if (> (sslength ss) 0)
(alert (strcat "Area = " (rtos (abs S) 2 2)))
(alert "\n Ban chua Pick vao mien kin nao ca ")
)
(command "erase" ss "")
(Princ)
)
 

 

anh có thể giúp em sửa lisp này thành: thay vì hiện kết quả diện tích len màn hình thì em muốn kết quả nó sẽ hiện thành text trên file cad đc ko ạ

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  

×