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

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

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

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)

)

 

 

)

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 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))

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 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.com/upfiles/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

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á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 ?

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ó 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

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  

×