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

[Yêu Cầu] Di chuyển Block thẳng hàng sang đường gấp khúc

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

Nhờ các Bác viết cho 1 lisp di chuyển các đối tượng Block được chọn trên 1 Polyline hoặc line thằng hàng sang đường gấp khúc

+ Khi chọn toàn bộ các Block cần di chuyển nằm trên 1 đường polynie hoặc line thẳng hàng.

+ Chọn vào đường gấp khúc.

+ Các Block tự động di chuyển sang đường gấp khúc. khoảng cách giữa các block trên đường Polilynie và line thẳng bằng và trùng với khoảng cách các block trên đường gấp khúc.

Cám ơn Các Bác Ạ! 

File cad đây ạ.

Di chuyen 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
30 phút trước, pdhuyxn2 đã nói:

Nhờ các Bác viết cho 1 lisp di chuyển các đối tượng Block được chọn trên 1 Polyline hoặc line thằng hàng sang đường gấp khúc

+ Khi chọn toàn bộ các Block cần di chuyển nằm trên 1 đường polynie hoặc line thẳng hàng.

+ Chọn vào đường gấp khúc.

+ Các Block tự động di chuyển sang đường gấp khúc. khoảng cách giữa các block trên đường Polilynie và line thẳng bằng và trùng với khoảng cách các block trên đường gấp khúc.

Cám ơn Các Bác Ạ! 

File cad đây ạ.

Di chuyen Block.dwg

Đề sai: chiều dài 2 đường bị khác nhau

  • 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

Bạn

1 giờ trước, pdhuyxn2 đã nói:

Dạ file cad bị lệch 2m ạ. Em đã chỉnh lại rồi ạ. Cám ơn Bác!

Di chuyen Block1.dwg

Bạn thử code này: 

(defun c:dch()
  (setq ssb (ssget '((0 . "INSERT"))) i 0)
   (setq dtgoc (car (entsel "\nChon doi tuong goc:")))
   (setq dtgkhuc (car (entsel "\nChon doi tuong gap khuc:")))
  (while (setq enameblock (ssname ssb i))
    (setq insp (vlax-curve-getClosestPointTo dtgoc (cdr(assoc 10 (entget enameblock)))))
    (setq dist (vlax-curve-getdistAtPoint dtgoc insp))
    (setq inp2 (vlax-curve-getpointAtdist dtgkhuc dist))
    (if (vlax-curve-getFirstDeriv dtgkhuc (vlax-curve-getparamatpoint dtgkhuc inp2))
        (setq angs (angle '(0 0 0) (vlax-curve-getFirstDeriv dtgkhuc (vlax-curve-getparamatpoint dtgkhuc inp2))))
    (setq angs (angle '(0 0 0) (vlax-curve-getFirstDeriv dtgkhuc (1+ (vlax-curve-getparamatpoint dtgkhuc inp2)))))
     )
    (setq vla-obj (vlax-ename->vla-object enameblock))
    (vla-move (setq vla-obj2 (vla-copy vla-obj)) (vlax-3d-point insp) (vlax-3d-point inp2))
    (vla-rotate vla-obj2 (vlax-3d-point inp2) angs)
    (setq i (1+ i))
    )
  )

  • Like 4
  • 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
14 giờ trước, Tue_NV đã nói:

Bạn

Bạn thử code này: 


(defun c:dch()
  (setq ssb (ssget '((0 . "INSERT"))) i 0)
   (setq dtgoc (car (entsel "\nChon doi tuong goc:")))
   (setq dtgkhuc (car (entsel "\nChon doi tuong gap khuc:")))
  (while (setq enameblock (ssname ssb i))
    (setq insp (vlax-curve-getClosestPointTo dtgoc (cdr(assoc 10 (entget enameblock)))))
    (setq dist (vlax-curve-getdistAtPoint dtgoc insp))
    (setq inp2 (vlax-curve-getpointAtdist dtgkhuc dist))
    (if (vlax-curve-getFirstDeriv dtgkhuc (vlax-curve-getparamatpoint dtgkhuc inp2))
        (setq angs (angle '(0 0 0) (vlax-curve-getFirstDeriv dtgkhuc (vlax-curve-getparamatpoint dtgkhuc inp2))))
    (setq angs (angle '(0 0 0) (vlax-curve-getFirstDeriv dtgkhuc (1+ (vlax-curve-getparamatpoint dtgkhuc inp2)))))
     )
    (setq vla-obj (vlax-ename->vla-object enameblock))
    (vla-move (setq vla-obj2 (vla-copy vla-obj)) (vlax-3d-point insp) (vlax-3d-point inp2))
    (vla-rotate vla-obj2 (vlax-3d-point inp2) angs)
    (setq i (1+ i))
    )
  )

 

Cám ơn bác Tuệ  và các Bác!

Bác có thể bổ sung giúp Em trường hợp 2 là "Chon doi tuong gap khuc:" .Đối tượng đường gấp khúc là các line rời rạc

Cám ơn Bác À !

Di chuyen Block2.dwg

  • Vote giảm 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
18 phút trước, pdhuyxn2 đã nói:

Cám ơn bác Tuệ  và các Bác!

Bác có thể bổ sung giúp Em trường hợp 2 là "Chon doi tuong gap khuc:" .Đối tượng đường gấp khúc là các line rời rạc

Cám ơn Bác À !

Di chuyen Block2.dwg

Bạn dùng lệnh PEDIT nối Line với nhau rồi dùng Lisp trên là được thôi

 

  • 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

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  

×