Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 11 July 2008 - 09:27 PM

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
  • 0

#2 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 11 July 2008 - 10:58 PM

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.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#3 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 12 July 2008 - 09:05 AM

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ỉ.
  • 0

#4 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 12 July 2008 - 09:36 AM

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.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#5 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 12 July 2008 - 09:53 AM

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.
  • 0

#6 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 12 July 2008 - 09:53 AM

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"
  • 0

#7 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 12 July 2008 - 09:54 AM

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"
  • 0

#8 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 12 July 2008 - 12:46 PM

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
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#9 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 12 July 2008 - 12:49 PM

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.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#10 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 12 July 2008 - 02:23 PM

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.
  • 0