Đến nội dung


Hình ảnh
- - - - -

Nhờ mấy bác Pro sửa giúp e đoạn lisp vẽ line taluy !


  • Please log in to reply
4 replies to this topic

#1 leejang

leejang

    biết lệnh move

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

Đã gửi 22 April 2011 - 05:02 PM

Lisp của em lập ra với ý tưởng là sẽ vẽ ra các line để tính phần đào đắp taluy san nền.
Đề bài: Text được chọn có giá trị <0 , thì dùng mái dốc 1/0.75. Tức là giá trị của text được nhân thêm k=0.75
Text được chọn có giá trị >0 , thì dùng mái dốc 1/1.5. Tức là giá trị của text được nhân thêm k=1.5
Text được chọn có giá trị >7 , thì dùng mái dốc 1/0.75. Tức là giá trị của text được nhân thêm k=1.5 và cộng thêm 2m vào chiều dài line tương ứng với khoảng "chiếu nghỉ"
Lisp em viết chạy rồi nhưng trong trường hợp giá trị text >7 thì nó vẽ ra 2 line liền. bác nào chỉnh giúp em cho nó chỉ vẽ ra 1 line. Đúng với ý tưởng thôi ạ. Em cảm ơn !
CODE


;;;;;;;;;================lo=============
(defun c:lo (/ kc kc1 ot k1)
(command "layer" "N" "GRID_TL" "S" "GRID_TL" "color" 3 "" "")

(repeat 10000
(setq p1 (getpoint "\n Pick diem: "))
(setq p2 (getpoint "\n Pick diem: "))

(setq kc (entget (car (entsel "\n Chenh cao: "))))
(setq otext (assoc 1 kc))
(setq ot (cdr otext))
(setq ot (read (substr ot 1)))

(setq g (angle p1 p2))



(if (< ot 0)
(progn

(setq KC1 (* (abs ot) 0.75))




(setq p3 (polar P1 G KC1))
(command "line" p1 p3 "")


)
)








(if (> ot 7)
(progn



(setq KC1 (* ot 1.5))

(setq k1 (* 2 (fix (/ ot 5))))
(setq KC1 (+ k1 KC1))



(setq p3 (polar P1 G KC1))
(command "line" p1 p3 "")


)
)



(if (> ot 0)

(progn


(setq kc1 (* ot 1.5))

(setq p3 (polar P1 G KC1))

(command "line" p1 p3 "")

)
)



(princ)
)


)
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 22 April 2011 - 10:27 PM

Bạn nên đưa kèm cả file test để mọi người hiểu rõ hơn ý đồ của lisp. Nhìn qua đoạn lisp của bạn thì mình thấy điều kiện if bị trùng.
(if (> ot 7) và (if (> ot 0), vì ot > 7 thì nó cũng thỏa mãn ot > 0. Vì vậy, ở điều kiện (if (> ot 0)) cuối cùng bạn cần đặt lại là 0 < ot < 7, tương đương ngôn ngữ lisp là : (if (and (> ot 0) (< ot 7))
  • 0

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


#3 leejang

leejang

    biết lệnh move

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

Đã gửi 23 April 2011 - 03:35 AM

Bạn nên đưa kèm cả file test để mọi người hiểu rõ hơn ý đồ của lisp. Nhìn qua đoạn lisp của bạn thì mình thấy điều kiện if bị trùng.
(if (> ot 7) và (if (> ot 0), vì ot > 7 thì nó cũng thỏa mãn ot > 0. Vì vậy, ở điều kiện (if (> ot 0)) cuối cùng bạn cần đặt lại là 0 < ot < 7, tương đương ngôn ngữ lisp là : (if (and (> ot 0) (< ot 7))

Cái này thì e đưa file cũng không thể hiểu được. Em chỉ mô ta ý đồ như sau: Lisp này e viết ra phục vụ việc tính phần taluy trong san nền một cách thủ công.Nó sẽ vẽ ra 1 line là khoảng cách theo phương ngang khi biết
Command:
lo
pick điểm thứ nhất ( là điểm của mắt lưới san nền, đỉnh hoặc chân taluy)
Pick điểm thứ 2 trên bản vẽ ( là điểm theo hướng chân hoặc đỉnh taluy )
Pick giá trị text : là chênh cao trong phần san nền (giá trị A)
Đây là hình vẽ mô tả yêu cầu:
http://www.cadviet.c...iles/3/mota.jpg
Lisp e viết nó bắt điểm mình pick trên màn hình nhiều khi không chính xác. không bit do lỗi cái j ? VÀ e đã chỉnh đoạn if đó thì nó ko vẽ trùng rồi. Thực ra e biết đoạn đó trùng nhưng do e ko bit lập trình lisp nên ko bit cách viết if có and như thế nào cả.hihi
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 April 2011 - 10:13 PM

Cái này thì e đưa file cũng không thể hiểu được. Em chỉ mô ta ý đồ như sau: Lisp này e viết ra phục vụ việc tính phần taluy trong san nền một cách thủ công.Nó sẽ vẽ ra 1 line là khoảng cách theo phương ngang khi biết
Command:
Lisp e viết nó bắt điểm mình pick trên màn hình nhiều khi không chính xác. không bit do lỗi cái j ? VÀ e đã chỉnh đoạn if đó thì nó ko vẽ trùng rồi. Thực ra e biết đoạn đó trùng nhưng do e ko bit lập trình lisp nên ko bit cách viết if có and như thế nào cả.hihi

Đỏ : bạn có giấu điều gì không ?
Xanh : Không có lời diễn tả nào trực quan bằng file cad thể hiện ý đồ, hình mẫu gốc và kết quả sau khi chạy lisp. Bạn nghĩ chụp 1 bức ảnh thì dễ hiểu hơn chăng :)

Về vấn đề pick điểm không chính xác, bạn thử nghiên cứu biến OSmode và đặt đúng chế độ bắt điểm mình cần xem sao ?
  • 0

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


#5 leejang

leejang

    biết lệnh move

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

Đã gửi 24 April 2011 - 01:53 AM

[quote name='ketxu' date='23 April 2011 - 10:13 PM' timestamp='1303571602' post='142594']
Đỏ : bạn có giấu điều gì không ?
Xanh : Không có lời diễn tả nào trực quan bằng file cad thể hiện ý đồ, hình mẫu gốc và kết quả sau khi chạy lisp. Bạn nghĩ chụp 1 bức ảnh thì dễ hiểu hơn chăng :)

Về vấn đề pick điểm không chính xác, bạn thử nghiên cứu biến OSmode và đặt đúng chế độ bắt điểm mình cần xem sao ?
[/quote}
Hiện tại thì lisp đã chạy đúng rồi bác ạ ? Em cảm ơn bác nhìu ! hii
  • 0