Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
minhtu2004

[Nhờ chỉnh sửa] Lisp vẽ đường thẳng nhập chiều cao va khoảng cách liên tục

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

minhtu2004    35

- Chào diễn đàn, mình mới biết căn bản về lisp và có viết 1 đoạn lisp theo tài liệu của diễn đàn để phục vụ công việc vẽ 1 đường thẳng bằng cách nhập chiều cao và khoảng cách từng đoạn thẳng. Nhưng không có khả năng code phần nhập khoảng cách và lập đi lại nhiều lần nên nhờ diễn đàn chỉnh sửa giúp. Mình đính kèm file cad và phần code của mình nhờ mọi người giúp đỡ.

(defun c:dpl ()
 (setq P1 (getpoint "cho diem dau: "))
 (setq L (getreal "nhap chieu dai: "))
 (setq D 80.000)
 (setq D1 (* (- L D) 1000))
 (setq P2 (polar P1 (/ Pi  2) D1))
 (command "line" P1 P2 "")
 (princ)
)

http://www.cadviet.c...35974_banve.dwg

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
ketxu    2.653

+nhâp

(defun c:dpl ()
(while
(and
(setq P1 (getpoint "cho diem dau: "))
(setq L (getreal "nhap chieu dai: "))
)
(setq D 80.000)
(setq D1 (* (- L D) 1000))
(setq P2 (polar P1 (/ Pi 2) D1))
(command "line" P1 P2 "")
) (princ) )

Bạn thêm while và and vào cho sự kiện chọn điểm + nhập chiều dài

  • 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
minhtu2004    35

+nhâp

(defun c:dpl ()
(while
(and
(setq P1 (getpoint "cho diem dau: "))
(setq L (getreal "nhap chieu dai: "))
)
(setq D 80.000)
(setq D1 (* (- L D) 1000))
(setq P2 (polar P1 (/ Pi 2) D1))
(command "line" P1 P2 "")
) (princ) )

Bạn thêm while và and vào cho sự kiện chọn điểm + nhập chiều dài

-Mình cảm ơn bạn đã giúp, nhưng còn phần nhập khoảng cách thì như thế nào vậy.Nhu cầu của mình là chỉ việc nhập giá trị chiều cao và khoảng cách từng doạn thẳng.

-VD:Đầu tiên chọn điểm bắt đầu, nhập chiều cao được đường thẳng 1 và sao đó nhập khoảng cách 443.1 và chiều cao là đường thẳng thứ 2 cứ như vậy đến khi không nhập nữa.Như trong file cad mình đính kèm. Cám ơn bạ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
Doan Van Ha    2.680

-Mình cảm ơn bạn đã giúp, nhưng còn phần nhập khoảng cách thì như thế nào vậy.Nhu cầu của mình là chỉ việc nhập giá trị chiều cao và khoảng cách từng doạn thẳng.

-VD:Đầu tiên chọn điểm bắt đầu, nhập chiều cao được đường thẳng 1 và sao đó nhập khoảng cách 443.1 và chiều cao là đường thẳng thứ 2 cứ như vậy đến khi không nhập nữa.Như trong file cad mình đính kèm. Cám ơn bạn.

 

Dùng thử cái này xem. Về tỉ lệ, thêm bớt là do bạn đấy nhé. Tôi chỉ làm trên cơ sở lisp của bạn thôi.

(defun c:dpl ()
 (command "undo" "begin")
 (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
 (setq P1 (getpoint "\ncho diem dau: "))
 (setq L (getreal "\nnhap chieu dai: "))
 (setq D 80.000)
 (setq D1 (* (- L D) 1000))
 (setq P2 (polar P1 (/ Pi  2) D1))
 (command "line" P1 P2 "")
 (while (setq kc (getreal "\nNhap khoang cach: "))
(setq L (getreal "\nnhap chieu dai: "))
(setq P1 (polar P1 0 kc))
(setq P2 (polar P1 (/ Pi  2) D1))
(command "line" P1 P2 ""))
 (acet-sysvar-restore)
 (command "undo" "end")
 (princ)
)

  • 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
ketxu    2.653

-Mình cảm ơn bạn đã giúp, nhưng còn phần nhập khoảng cách thì như thế nào vậy.Nhu cầu của mình là chỉ việc nhập giá trị chiều cao và khoảng cách từng doạn thẳng.

-VD:Đầu tiên chọn điểm bắt đầu, nhập chiều cao được đường thẳng 1 và sao đó nhập khoảng cách 443.1 và chiều cao là đường thẳng thứ 2 cứ như vậy đến khi không nhập nữa.Như trong file cad mình đính kèm. Cám ơn bạn.

Ồ, srr bạn mình chưa xem bản vẽ, chỉ add thêm while để tạo vòng lặp ^^

  • 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
Doan Van Ha    2.680

-Cám ơn diễn đàn, bạn ketxu và bạn Doan Van Ha. Lisp đã đúng yêu cầu của mình.Không thấy nút thank chỗ nào hết.

 

Nút "Thanks" bây giờ đổi thành nút "Like this" 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
minhtu2004    35

-Có 1 chút phát sinh bạn chỉnh dùm, la khi nhập khoảng cách nhỏ hơn 1 thì đường thẳng không vuông góc và khi chạy lisp truy bắt điểm bị tắt hết. Bạn chỉnh sửa dùm.Mình có đính kèm file cad và code

(defun c:dpl ()
 (command "undo" "begin")
 (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
 (setq P1 (getpoint "\ncho diem dau: "))
 (setq L (getreal "\nnhap chieu dai: "))
 (setq D 80.000)
 (setq D1 (* (- L D) 1000))
 (setq P2 (polar P1 (/ Pi 2) D1))
 (command "line" P1 P2 "")
 (while (setq kc (* (getreal "\nNhap khoang cach: ") 100))
(setq L (getreal "\nnhap chieu dai: "))
(setq D 80.000)
(setq D1 (* (- L D) 1000))
(setq P1 (polar P1 0 kc))
(setq P2 (polar P1 (/ Pi 2) D1))
(command "line" P1 P2 ""))
 (acet-sysvar-restore)
 (command "undo" "end")
 (princ)
)

http://www.cadviet.c...974_banve_1.dwg

  • 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
Doan Van Ha    2.680

-Có 1 chút phát sinh bạn chỉnh dùm, la khi nhập khoảng cách nhỏ hơn 1 thì đường thẳng không vuông góc và khi chạy lisp truy bắt điểm bị tắt hết.

 

Thực ra, nói truy bắt điểm bị tắt cũng chưa đúng lắm. Nhưng xin nhận trách nhiệm: lỗi này là tại tôi sơ ý. Để đền bù những gì mà tôi sai sót mong bạn hãy nêu hết y/c để tôi làm 1 phát luôn thể.

Một lần nữa, srr bạ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
minhtu2004    35

 

Thực ra, nói truy bắt điểm bị tắt cũng chưa đúng lắm. Nhưng xin nhận trách nhiệm: lỗi này là tại tôi sơ ý. Để đền bù những gì mà tôi sai sót mong bạn hãy nêu hết y/c để tôi làm 1 phát luôn thể.

Một lần nữa, srr bạn!

-Bạn không có lỗi gì hết mình đang nhờ bạn giúp mà. Cuối cùng yêu cầu của mình là chỉnh lại để nhập khoảng cách nhỏ hơn 1 mà không bị như file cad mình đính kèm và thêm dòng code chọn đối tượng text, mtext có sẳn và chuyển đối tượng đó sang số thực.Mong bạn giúp đỡ.

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
minhtu2004    35

Trông cái này giống 1 yêu cầu nào đó trên diễn đàn r ý nhỉ ^^

-Cái này mình mới đưa lên diễn đàn, còn có bài yêu cầu nào giống như thế này bạn có thể cho mình link để tham khảo. Cám ơn bạn nhiề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
Doan Van Ha    2.680

-Bạn không có lỗi gì hết mình đang nhờ bạn giúp mà. Cuối cùng yêu cầu của mình là chỉnh lại để nhập khoảng cách nhỏ hơn 1 mà không bị như file cad mình đính kèm và thêm dòng code chọn đối tượng text, mtext có sẳn và chuyển đối tượng đó sang số thực.Mong bạn giúp đỡ.

 

Số thực đó là số nào vậy bạ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
ketxu    2.653

-Cái này mình mới đưa lên diễn đàn, còn có bài yêu cầu nào giống như thế này bạn có thể cho mình link để tham khảo. Cám ơn bạn nhiều.

Bạn gửi yêu cầu thì gửi 1 thể. Còn nếu bạn muốn tự tay viết thì k nên đặt vấn đề dần dà kiểu như thế này ^^

Mình không ở trong ngạch của bạn, nhưng nhìn hình vẽ giống như vẽ đường cao độ hay trắc dọc trắc ngang gì đấy từ mấy số khoảng cách + cao độ bên dưới. Mà cái này bạn search trên 4room chắc thấy kha khá

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
minhtu2004    35

-Là những số text và mtext trong file cad đó bạn. Thay vì mình phải nhập những số đó thì mình chọn những số text và mtext đó. Xin lỗi vì không nói rõ rà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
minhtu2004    35

Bạn gửi yêu cầu thì gửi 1 thể. Còn nếu bạn muốn tự tay viết thì k nên đặt vấn đề dần dà kiểu như thế này ^^

Mình không ở trong ngạch của bạn, nhưng nhìn hình vẽ giống như vẽ đường cao độ hay trắc dọc trắc ngang gì đấy từ mấy số khoảng cách + cao độ bên dưới. Mà cái này bạn search trên 4room chắc thấy kha khá

-Mình xin lỗi vì đã làm phiền diễn đàn, mình cũng đã tìm trước khi nhờ diễn đàn chỉnh sửa dùm. Lúc đầu ý tưởng của mình là chỉ nhập số là sẽ được những đoạn thẳng và lisp trên có thể giải quyết được vấn đề. Nhưng trong file cad có sẳn những con số nên mình mới nhờ giúp thêm 1 đoạn code lấy giá trị từ những con số text đó và sửa lổi giá trị nhỏ hơn 1. Xin lỗi vì đã làm phiề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
Doan Van Ha    2.680

-Mình xin lỗi vì đã làm phiền diễn đàn, mình cũng đã tìm trước khi nhờ diễn đàn chỉnh sửa dùm. Lúc đầu ý tưởng của mình là chỉ nhập số là sẽ được những đoạn thẳng và lisp trên có thể giải quyết được vấn đề. Nhưng trong file cad có sẳn những con số nên mình mới nhờ giúp thêm 1 đoạn code lấy giá trị từ những con số text đó và sửa lổi giá trị nhỏ hơn 1. Xin lỗi vì đã làm phiền.

 

Tôi chỉ sửa theo y/c của bạn, còn việc +-*/ là lấy theo lisp của bạn, nếu không đúng y/c thì bạn tự sửa vì tôi không hiểu bản chất ý đồ của bạn.

(defun c:dpl ()
 (command "undo" "begin")
 (setq P1 (getpoint "\nChon diem dau: "))
 (acet-sysvar-set (list "osmode" 0 "cmdecho" 0))
 (princ "\nChon Text/Mtext de lay chieu dai...")
 (setq L (atof (cdr (assoc 1 (entget (car (entsel)))))))
 (setq P2 (polar P1 (/ Pi  2) (* (- L 80.0) 1000)))
 (command "line" P1 P2 "")
 (while (and (princ "\nChon Text/Mtext de lay khoang cach...") (setq kc (atof (cdr (assoc 1 (entget (car (entsel))))))))
(princ "\nChon Text/Mtext de lay chieu dai...")
(setq L (atof (cdr (assoc 1 (entget (car (entsel)))))))
(setq P1 (polar P1 0 kc))
(setq P2 (polar P1 (/ Pi  2) (* (- L 80.0) 1000)))
(command "line" P1 P2 ""))
 (acet-sysvar-restore)
 (command "undo" "end")
 (princ))

  • 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
minhtu2004    35

-Cám ơn bạn. Lisp đã đúng theo ý mình rồi, nhưng bị tắt truy bắt điểm khi kết thúc lệnh nhưng không sao tuy hơi bất tiện 1 chút. Cám ơn bạn 1 lần nữa đã giúp.

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
ketxu    2.653

-Cám ơn bạn. Lisp đã đúng theo ý mình rồi, nhưng bị tắt truy bắt điểm khi kết thúc lệnh nhưng không sao tuy hơi bất tiện 1 chút. Cám ơn bạn 1 lần nữa đã giúp.

 

=> Chỉ xảy ra khi bạn dùng esc để kết thúc lệ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

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  

×