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

[Yêu cầu] Lisp hoàn công cọc

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

Mình có các point thiết kế và point hoàn công nằm gần nhau, mình muốn lisp sẽ quét chọn tất cả và cho ra bản vẽ độ lệch X, độ lệch Y. Cảm ơn các Pro. mình đang cần gấp, nhờ các bác giúp đỡ.

đây là file mẫu:

https://www.mediafire.com/?k53vg06p1f997mh

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ấc cả đều là POINT. Chỉ khác nhau về Layer. 

Lấy gì để làm cơ sở Point đỏ này là cặp đôi hoàn hảo với Point tím nào.

Có phải 2 thằng gần nhau nhất là 1 cặp không?

  • 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

Không biết dựa vào Delta X, Delta Y có được không? hoặc bằng cách khác thì nhờ các bác vậy. Chân thành cảm ơ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

Thử cái này xem sao.


(defun c:tmp()
  (defun dxf(id v) (cdr (assoc id (entget v))))
  (defun dxy(a b) (list (atoi (rtos (- (car b) (car a)) 2 0)) (atoi (rtos (- (cadr b) (cadr a)) 2 0))))
  
  (defun entmake1(name pt cao hg)
    (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)
(cons 41 cao) (cons 42 cao) (cons 50 hg)))
  )
  (defun entmake2(tri pt hg lay)
    (entmake (list '(0 . "TEXT") (cons 10 pt) (cons 11 pt) (cons 1 tri) '(40 . 250.0)
'(7 . "Style_epcoc") '(71 . 0) '(72 . 1) (cons 8 lay) (cons 50 hg)))
  )
  ;;===============================================''
  
  (setq sl (acet-ss-to-list (ssget '((0 . "POINT"))))
sl1 nil)
  (while sl
    (setq a (car sl)
 sl (cdr sl)
 sl1 (cons (cons a (setq b (cadar (vl-sort (mapcar '(lambda(x) (list (distance (dxf 10 a) (dxf 10 x)) x)) sl)
       '(lambda(x y) (< (car x) (car y))))))) sl1)
 sl (vl-remove b sl))
  )
  (setq sl1 (mapcar '(lambda(x) (if (= "01_Diemdo" (dxf 8 (car x))) (cons (cdr x) (car x)) x)) sl1)
sl1 (mapcar '(lambda(x) (cons (cdr x) (dxy (dxf 10 (car x)) (dxf 10 (cdr x)))))  sl1)
  )
  (mapcar '(lambda(x)
    (entmake1 "KYHIEUCOCEP" (dxf 10 (car x)) 500 0)
    (entmake1 "muiten" (polar (dxf 10 (car x)) (* 0.5 pi) -550) 4.92126 (if (< (cadr x) 0) pi 0))
    (entmake1 "muiten" (polar (dxf 10 (car x)) 0 -550) 4.92126 (if (< (last x) 0) (* -0.5 pi) (* 0.5 pi)))
    (entmake2 (itoa (cadr x)) (polar (dxf 10 (car x)) (* 0.5 pi) -850) 0 "03_DolechX" )
    (entmake2 (itoa (last x)) (polar (dxf 10 (car x)) 0 -600) (* 0.5 pi) "04_DolechY")) sl1)
  (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

Trời Bác Tot77 viết nhanh thật mà đúng ý chủ thớt luôn, đây là cái em đang cần. Cảm ơn Bác rất 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

Bác Tot77 cho em hỏi hình như Lisp này chạy trên file có sẵn các Block, trên file mới chỉ tạo ra text độ lệch thôi, 

* Nhờ Bác sửa Lại giùm Hãy qui định cho lisp là màu đỏ là point thiết kế, còn các màu khác là point hoàn công,

* Vậy khi tính độ lệch thì lấy trị đo (Hoàn công ) trừ đi Thiết kế, nếu không mũi tên sẽ bị quay ngược không đúng chiều, và độ lệch cũng đổi dấu=> như vậy sẽ bị sai.

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

Trong lisp này cần có :

1/ 2 block "KYHIEUCOCEP" và "muiten", 

2/ 3 layer "01_Diemdo" , "03_DolechX" , "04_DolechY" .

3/ 1 kiểu text "Style_epcoc" .

 

Do đó trong file của bạn cần có các thứ "đồ chơi" nêu trên, nếu không thì kết quả chạy ra sẽ thiếu sót. Tốt nhất khi vẽ bạn vẽ trên file có sẵn các thứ trên, sau đó wblock nó ra thành file mới, đỡ mất công tạo lại từ đầu.

 

Khi tôi test file của bạn đưa, tôi copy các point ra một nơi khác, chạy lisp, so sánh kết quả với kết quả của bạn, thấy giống y, kể cả chiều mũi tên và dấu +-. Lisp nó lấy point nằm trong layer  "01_Diemdo"  là point hoàn công, thì đương nhiên cái kia là point thiết kế. Vậy là ok rồ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

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  

×