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  
quochuyksxd

[Help] tìm lisp xử lý như hình minh họa

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

Chào bạn, mình mới học viết lisp, với khả năng hiện tại, mình viết đoạn lisp sau để áp dụng cho hình vẽ trên ( chưa ghi kích thước), bạn áp dụng thử nhé. :D  :lol: 
P/s: bạn load lisp vào và dùng lệnh tắt là cf, nếu bạn có thêm yêu cầu gì thì mình sẽ nghiên cứu để viết thêm

 (defun C:cf(/ os echo x y p p1 p2 p3 p4)
(setq os (getvar 'osmode)
echo (getvar 'cmdecho))
(setvar 'osmode 32)
(setvar 'cmdecho 0)

(setq x (getdist "\n khoang cach vat theo x:")
y (getdist "\n khoang cach vat theo y:")
p (getpoint "\n Chon giao diem hai doan thang:")
p1 (polar p (* 3 pi 0.5) y)
p2 (polar p 0 x)
p3 (list (+ (car p1) (* x 0.5)) (+ (cadr p1) (* y 0.5)))
p4 (polar p3 (* 0.5 pi) y)
)
(setvar 'osmode 0)

(command ".line" p1 p2 "")
(command ".trim" (entlast) "" "f" p3 p4 "" "")

(setvar 'osmode os)
(setvar 'cmdecho echo)
(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

Cảm ơn bạn nhé, cũng đúng ý mình rồi nhưng bạn có thể bổ sung thêm lựa chọn hướng ngược lại được không? vì như hình trên là vát góc bên phải, có thể chọn thêm vát góc bên trái nữa. Y mặc định giá trị bằng X giống lệnh champer. nếu nhập giá trị khác cho Y thì thay đổ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

Phím tắt 1 (bạn nhập một số) nếu x=y; phím tắt 2 (phải nhập hai số) nếu x # y; nếu bạn nhập x <0, y< 0 thì hình sẽ ngược lại tương ứng với cái hình của bạn ở trên. cái lisp mình viết hơi củ chuối nhưng đã đáp ứng được yêu cầu của bạn ở trên, bạn thử áp dụng với từng trường hợp nhé  :D  :D  :D

(defun C:2(/ os echo x y p p1 p2 p2a p3 p3a p4 p4a)
  (setq os (getvar 'osmode)
echo (getvar 'cmdecho))
  (setvar 'osmode 32)
  (setvar 'cmdecho 0)
  
  (setq x (getdist "\n khoang cach vat theo x:")
y (getdist "\n khoang cach vat theo y:")
p (getpoint "\n Chon giao diem hai doan thang:")
p1 (polar p (* 3 pi 0.5) y)
p2 (polar p 0 x)
p2a (polar p pi (abs x))
p3 (list (+ (car p1) (* x 0.5)) (+ (cadr p1) (* y 0.5)))
p3a (list (+ (car p1) (* x 0.5)) (+ (cadr p1) (* y 0.5)))
p4 (polar p3 (* 0.5 pi) y)
p4a (polar p3a (* 0.5 pi) y)
)
  (setvar 'osmode 0)
  (if (> x 0)
    (command ".line" p1 p2 ""
".trim" (entlast) "" "f" p3 p4 "" "")
 
  (command ".line" p1 p2a ""
  ".trim" (entlast) "" "f" p3a p4a "" "")
  )
 
  (setvar 'osmode os)
  (setvar 'cmdecho echo)
  (princ)
  )
;------------------------------------------------------------
(defun C:1(/ os echo x p p1 p2 p2a p3 p3a p4 p4a)
  (setq os (getvar 'osmode)
echo (getvar 'cmdecho))
  (setvar 'osmode 32)
  (setvar 'cmdecho 1)
  
  (setq x (getdist "\n khoang cach vat:")
p (getpoint "\n Chon giao diem hai doan thang:")
p1 (polar p (* 3 pi 0.5) x)
p1a (polar p (* 3 pi 0.5) (abs x))
p2 (polar p 0 x)
p2a (polar p pi (abs x))
p3 (list (+ (car p1) (* x 0.5)) (+ (cadr p1) (* x 0.5)))
p3a (list (+ (car p1) (* x 0.5)) (+ (cadr p1) (* x 0.5)))
p4 (polar p3 (* 0.5 pi) x)
p4a (polar p3a (* 0.5 pi) x)
)
  (setvar 'osmode 0)
  (if (> x 0)
    (command ".line" p1 p2 ""
".trim" (entlast) "" "f" p3 p4 "" "")
 
  (command ".line" p1a p2a ""
  ".trim" (entlast) "" "f" p3a p4a "" "")
  )
 
  (setvar 'osmode os)
  (setvar 'cmdecho echo)
  (princ)
  )

  • Vote tăng 2

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  

×