Đến nội dung


Hình ảnh
- - - - -

[Nhờ giúp đỡ] Lisp tìm giao điểm


  • Please log in to reply
1 reply to this topic

#1 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 31 October 2013 - 09:32 AM

Sau khi nhận được sự giúp đỡ từ các bạn trên diễn đàn mình đã chỉnh sửa và hoàn thành lisp tìm giao điểm.

Nhưng trong quá trình test lisp mình gặp phải rắc rối sau.

Cùng 1 tập hợp đối tượng nhưng ở 2 bản vẽ khác nhau cho 2 kết quả khác nhau.

Vậy chứng tỏ lisp không cho kết quả sai mà định dạng của 2 file bản vẽ có vấn đề. Các bạn có thể chỉ ra hộ mình không?

Mình không dành về biến định dạng của file lắm.

Bản vẽ cho kết quả đúng:http://www.cadviet.c...633_test1_1.dwg

Bản vẽ cho kết quả sai:http://www.cadviet.c...3_dongmuc_1.dwg

(defun c:tt (/ E1 E2 ELE ELE1 PLST PST SSL)

  ;;;;----------------------------Relist------------------------------
  (defun relist (lst / lst1)
;;;writen by Tue_NV
  (foreach x lst
   (if (not (member x lst1)) (setq lst1 (append lst1 (list x))))
   (Progn
   (foreach y lst1
   (if (equal y x 1.0e-8)
   (setq lst1 (vl-remove y lst1))
   );end if
);end Foreach
   (setq lst1 (append lst1 (list x)))
    );end progn
);end Foreach
    )
  ;;;;;-------------------------Chay chuong trinh----------------------
(princ "\n Chon duong dong muc: ")
(setq ssl (acet-ss-to-list (ssget))
          plst (list)
          e2 (car (entsel "\n Chon duong tim")))
  ;;;;--------------------------Tim giao diem khong gian------------------------
(foreach en ssl
       (cond
             ((= (cdr (assoc 0 (entget en))) "LWPOLYLINE") (setq ele (cdr (assoc 38 (entget en)))))
             ((= (cdr (assoc 0 (entget en))) "POLYLINE")(setq ele (last (cdr (assoc 10 (entget en))))))      
             ((= (cdr (assoc 0 (entget en))) "LINE") (setq ele (last (cdr (assoc 10 (entget en))))))
      ((= (cdr (assoc 0 (entget en))) "TEXT") (progn (setq ele 0)(setq ele1 (cdr (assoc 10 (entget en))))))
             (T (setq ele nil))
       )
      (if ele
(progn
   (if (= ele 0)
     (progn
       (setq plst (append plst (list ele1)))
       )
     (progn
       (command "copy" e2 "" (list 0 0 0) (list 0 0 ele))
       (setq e1 (entlast)
      plst (append plst (acet-geom-intersectwith e1 en 0)) )
       (command "erase" e1 "")
       )
     )
   )
)
  )
  ;;;;;;;-----------------------------Sap xep va xoa diem trung--------------------------
  (setq plst (relist plst))
  (if(= (cdr(assoc 0 (entget e2))) "LINE")
    (progn
      (setq pst (vlax-curve-getStartPoint e2))
      (setq plst (vl-sort plst '(lambda (x y) (< (distance pst (list (car x) (cadr x) 0)) (distance pst (list (car y) (cadr y) 0))))))
      )
    (progn
      (setq plst (vl-sort plst '(lambda (x y) (< (vlax-curve-getparamatpoint e2 (list (car x) (cadr x) 0)) (vlax-curve-getparamatpoint e2 (list (car y) (cadr y) 0))))))
      )
    )
  (princ plst)
  (princ)
  )

 


  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#2 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 31 October 2013 - 02:33 PM

Mình đã tìm hiểu ở bản vẽ sai, khi đưa các đối tượng về gần WCS 0,0,0 thì lại cho kết quả đúng.

Các bạn chỉ giúp mình làm thế nào đê vẫn giữ nguyên tọa độ ban đầu mà vẫn cho kết quả đúng không?


  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.