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

Tính diện tích tự động

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

Mình đang viết 1 LISP như sau :

- Vẽ 1 đối tượng : 1 hình tam giác tạo bởi 3 đường LINE

- Xác định 1 điểm nằm trong tam giác đó PT, điểm này không nằm ở tâm mà có thể nằm gần sát 1 cạnh tam giác

- Dùng (command "boundary" PT "") để tạo 1 đường POLYLINE bao kín tam giác

-> đến đây thì lỗi, lúc chạy được lúc không, cụ thể CAD thông báo lỗi

 

Point is directly on an object.

Selected object does not have an area

 

*Invalid selection*

Expects a point or Last/CLass

Function cancelled

 

Vậy là sao hả các bạn, theo thông báo trên thì việc tạo BOUNDARY bị lỗi vì điểm chọn nằm trên đối tượng (theo mình hiểu thì CAD cho rằng điểm này nằm trên 1 cạnh nào đó của TAM GIÁC, thực tế nó chỉ nằm gần thôi)

Giúp mình 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

Bạn không đưa đoạn lisp lên đây thì mọi người làm sao biết được sai chỗ nào.

Tôi đoán rằng bạn chưa tắt chế độ bắt điểm khi thực hiện lệnh nên lệnh boundary đã bắt nhầm phải cạnh hoặc đỉnh đường thẳng gây ra lỗi.

Hãy gán biến OSMODE về 0 trước khi thực thi các lệnh liên quan đến bắt điể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

Tiện đây cho mình hỏi luôn, tại sao trong LISP mình viết

ví dụ defun c:CL()

gọi 1 hàm của CAD

ví dụ (command "LINE" pt1 pt2 "")

thì sau khi tiếp tục chương trình tại dòng nhắc lệnh nó lại thông báo là :

Unknown command "CL". Press F1 for help.

Biến môi trường CMDECHO mình đã set về 0 rồi mà 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
Tiện đây cho mình hỏi luôn, tại sao trong LISP mình viết

ví dụ defun c:CL()

gọi 1 hàm của CAD

ví dụ (command "LINE" pt1 pt2 "")

thì sau khi tiếp tục chương trình tại dòng nhắc lệnh nó lại thông báo là :

Unknown command "CL". Press F1 for help.

Biến môi trường CMDECHO mình đã set về 0 rồi mà nhỉ.

-Khi lisp bị lổi bạn nên đưa cả lên thì mới biết lỗi chổ nào chứ bạn ví dụ thì ai mà biết lổi chổ nào.

-Cái lisp tính diện tích bằng cách pick trong vùng kín bác Nguyenhoanh có viết rồi nếu muốn tự viết thì bạn tham khoả nếu không thì dùng luôn cho đở mất cô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

Ví dụ LISP vẽ tam giác

;---------------------------------------------------------------

(defun c:vtg()

(setvar "CMDECHO" 0)

(setq OSC (getvar "OSMODE"))

(setvar "OSMODE" 0)

(setq PTG (list 0 0 5 0 3 4 0 0))

(setq pt (list 3 0.25))

(setq n (/(length PTG)2))

(setq i 2)

(setq pt1 (list (nth 0 PTG)(nth 1 PTG)))

(repeat (- n 1)

(setq pt2 (list (nth i PTG)(nth (1+ i) PTG)))

(entmake (list '(0 . "LINE")(cons '10 pt1)(cons '11 pt2)))

(setq pt1 pt2)

(setq i (+ i 2))

)

(command "BOUNDARY" pt "")

(command "AREA" "O" (entlast) "")

(setq s (getvar "AREA"))

(entdel (entlast))

(princ (strcat "\nDien tich S = "(rtos s 2 2)))

(setvar "OSMODE" OSC)

(princ)

)

;---------------------------------------------------------------

Kết quả vẽ và tính được diện tích tam giác nhưng thông báo như sau :

Command: vtg

Unknown command "VTG". Press F1 for help.

 

Dien tich S = 10.00

 

Mình muốn biết lỗi gì mà hiện thông báo Unknown command "VTG"

 

Hic mạng lag wá bấm ra 3 bài MOD làm ơn dọn giù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

Ví dụ LISP vẽ tam giác

;---------------------------------------------------------------

(defun c:vtg()

(setvar "CMDECHO" 0)

(setq OSC (getvar "OSMODE"))

(setvar "OSMODE" 0)

(setq PTG (list 0 0 5 0 3 4 0 0))

(setq pt (list 3 0.25))

(setq n (/(length PTG)2))

(setq i 2)

(setq pt1 (list (nth 0 PTG)(nth 1 PTG)))

(repeat (- n 1)

(setq pt2 (list (nth i PTG)(nth (1+ i) PTG)))

(entmake (list '(0 . "LINE")(cons '10 pt1)(cons '11 pt2)))

(setq pt1 pt2)

(setq i (+ i 2))

)

(command "BOUNDARY" pt "")

(command "AREA" "O" (entlast) "")

(setq s (getvar "AREA"))

(princ (strcat "\nDien tich S = "(rtos s 2 2)))

(setvar "OSMODE" OSC)

(princ)

)

;---------------------------------------------------------------

Kết quả vẽ và tính được diện tích tam giác nhưng thông báo như sau :

Command: vtg

Unknown command "VTG". Press F1 for help.

 

Dien tich S = 10.00

 

Mình muốn biết lỗi gì mà hiện thông báo Unknown command "VTG"

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í dụ LISP vẽ tam giác

;---------------------------------------------------------------

(defun c:vtg()

(setvar "CMDECHO" 0)

(setq OSC (getvar "OSMODE"))

(setvar "OSMODE" 0)

(setq PTG (list 0 0 5 0 3 4 0 0))

(setq pt (list 3 0.25))

(setq n (/(length PTG)2))

(setq i 2)

(setq pt1 (list (nth 0 PTG)(nth 1 PTG)))

(repeat (- n 1)

(setq pt2 (list (nth i PTG)(nth (1+ i) PTG)))

(entmake (list '(0 . "LINE")(cons '10 pt1)(cons '11 pt2)))

(setq pt1 pt2)

(setq i (+ i 2))

)

(command "BOUNDARY" pt "")

(command "AREA" "O" (entlast) "")

(setq s (getvar "AREA"))

(princ (strcat "\nDien tich S = "(rtos s 2 2)))

(setvar "OSMODE" OSC)

(princ)

)

;---------------------------------------------------------------

Kết quả vẽ và tính được diện tích tam giác nhưng thông báo như sau :

Command: vtg

Unknown command "VTG". Press F1 for help.

 

Dien tich S = 10.00

 

Mình muốn biết lỗi gì mà hiện thông báo Unknown command "VTG"

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
Kết quả vẽ và tính được diện tích tam giác nhưng thông báo như sau :

Command: vtg

Unknown command "VTG". Press F1 for help.

 

Dien tich S = 10.00

 

Mình muốn biết lỗi gì mà hiện thông báo Unknown command "VTG"

 

Đây thực ra không phải là lỗi mà cũng không ảnh hưởng đến kết quả lệnh lisp. Theo kinh nghiệm của mình thì do một số dòng lệnh chẳng hạn:

(command "boundary" p "") bị thừa một dấu "" do lệnh boundary chỉ cần pick điểm là ra kết quả, không cần gõ enter (dấu "") nữa. Một số lệnh khác cũng như vậy. Bạn thử bỏ các dấu "" thừa xem, dòng "Unknown command " sẽ biến mấ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

Một cách khắc phục những dòng thừa này là gọi hàm (princ) - Tạo ra một dòng trắng sau khi kết thúc các lệnh hoặc trước khi thông báo kết quả. Như vậy sẽ giấu đi những dòng chữ không cần thiết phía trê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

Sửa như trên, dòng thừa ... không biến mất, dù sao cũng cảm ơn bạn

+ Lệnh BOUNDARY dù sao cũng cần thêm 1 dấu "" phía sau thì mới kết thúc quá trình Pick điểm để tạo POLYLINE được

+ Thêm (princ) phía sau kết quả cũng không khả quan hơn.

+ Và một vấn đế quan trọng nữa là Unknown command "VTG". Press F1 for help. không phải được phát sinh bởi hàm gọi lệnh BOUNDARY mà do gọi hàm AREA gây nên, bạn thử bỏ dòng gọi lệnh AREA sẽ thấy.

...

 

Cũng theo ý của bạn ở trên, mình đã bỏ dấu nháy "" sau khi gọi lệnh AREA, kết quả ... tuyệt 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

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  

×