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

[Giúp đỡ]Tọa độ của điểm đặt block khác với ma 10 DFX

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

Mình dùng lisp sau để xem tọa độ của điểm đặt block thì cho ra kết quả khác với dùng lệnh mo xem tọa độ

Mọi người biết lý do giúp mình với

(defun c:gfi()
(setq ma (car (entsel)))
(setq ma1 (entget ma))
(princ ma1)
(princ)
)

 

2019-07-19 (1).png

Toa do Block.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
38 phút trước, Danh Cong đã nói:

Chắc bác thay đổi toạ độ UCS địa phương :)))

Bác đổi về UCS thế giới xem có lỗi nữa không :))

Không đơn giản rứa bỡi có nhiều block lại đúng chỉ 1 ít sai thôi.

Vấn đề nữa là thay mã dfx 210 về (0 0 1) nó lại nhảy đi chỗ khác

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

Do hiển thị thôi! (làm tròn số) -> thực chất là 1 đó!

Bạn thử xem có giống nhau không:

(defun c:td  (/ ent)
  (if (setq ent (car (entsel "\nPick Block: ")))
    (mapcar ''((x) (rtos x 2 2)) (cdr (assoc 10 (entget ent))))))

 

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

Mã dxf 210 là pháp vecto của mặt phẳng chứa block đó. 

Nếu thay đổi mặt phẳng thì nó thay đổi vị trí.

Do block nó nằm nghiêng nên thay đổi code 210 sẽ lỗi thôi

Code 210 có 3 giá trị tổng bình phương là 1.

Bạn muốn lấy giá trị thì bạn phải dùng chuyển trục toạ độ thôi.

Bạn thử tham khảo https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/dxf-codes-10-and-210-formula/td-p/1132777/page/2

 Mình ko trên máy nên chưa test.

  • Like 1
  • 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
36 phút trước, NTHAHT đã nói:

Do hiển thị thôi! (làm tròn số) -> thực chất là 1 đó!

Bạn thử xem có giống nhau không:

(defun c:td  (/ ent)
  (if (setq ent (car (entsel "\nPick Block: ")))
    (mapcar ''((x) (rtos x 2 2)) (cdr (assoc 10 (entget ent))))))

 

Chắc bạn chưa chú ý tọa độ x =512107.72 khi xem lệnh mo và x=-512107.72 khi dùng lisp

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
12 phút trước, huunhantvxdts đã nói:

Chắc bạn chưa chú ý tọa độ x =512107.72 khi xem lệnh mo và x=-512107.72 khi dùng lisp

Ah, srr.

Bạn chuyển theo lisp này xem!

(defun c:td  (/ els ent poi)
  (if (setq ent (car (entsel "\nPick Block: ")))
    (progn (setq els (entget ent))
           (setq poi (trans (cdr (assoc 10 els)) (cdr (assoc 210 els)) 1)
                 els (subst (cons 10 poi) (assoc 10 els) els)
                 els (subst '(210 0.0 0.0 1.0) (assoc 210 els) els))
           (entmod els))))

  • Like 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
14 phút trước, NTHAHT đã nói:

Ah, srr.

Bạn chuyển theo lisp này xem!

(defun c:td  (/ els ent poi)
  (if (setq ent (car (entsel "\nPick Block: ")))
    (progn (setq els (entget ent))
           (setq poi (trans (cdr (assoc 10 els)) (cdr (assoc 210 els)) 1)
                 els (subst (cons 10 poi) (assoc 10 els) els)
                 els (subst '(210 0.0 0.0 1.0) (assoc 210 els) els))
           (entmod els))))

Cái này mình thử rồi khi thay mã 210 block sẽ chuyển về vị trí tọa độ âm

Mình muốn lấy tọa độ theo lệnh mo

Hiện tại đang lấy giá trị tuyệt đối của tọa độ x,y không biết có trường hợp nào sai ko nữa

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  

×