Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 BKTen

BKTen

    biết vẽ circle

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

Đã gửi 10 May 2014 - 02:56 PM

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.mediafir...k53vg06p1f997mh


  • 0

Muốn làm bạn với AutoLisp. Mong được đàn anh Pro Chỉ dạy.


#2 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 10 May 2014 - 03:18 PM

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?


  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#3 BKTen

BKTen

    biết vẽ circle

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

Đã gửi 10 May 2014 - 03:28 PM

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!


  • 0

Muốn làm bạn với AutoLisp. Mong được đàn anh Pro Chỉ dạy.


#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 10 May 2014 - 06:48 PM

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


  • 1

#5 BKTen

BKTen

    biết vẽ circle

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

Đã gửi 10 May 2014 - 08:09 PM

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!


  • 0

Muốn làm bạn với AutoLisp. Mong được đàn anh Pro Chỉ dạy.


#6 BKTen

BKTen

    biết vẽ circle

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

Đã gửi 10 May 2014 - 08:24 PM

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.


  • 0

Muốn làm bạn với AutoLisp. Mong được đàn anh Pro Chỉ dạy.


#7 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 May 2014 - 08:26 AM

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. 


  • 1