Chuyển đến nội dung
Diễn đàn CADViet

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

Nếu chỉ thay đổi Rotation =0 thì chỉ cần lệnh SSX -> Block name -> Enter. Sau đó command: select -> "P" , chọn trong Palette Properties

image.thumb.png.3a91b41d17859708f31a6bc1abc65b1d.png

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

Nếu chỉ thay đổi Rotation =0 thì chỉ cần lệnh SSX -> Block name -> Enter. Sau đó command: select -> "P" , chọn trong Palette Properties

image.thumb.png.3a91b41d17859708f31a6bc1abc65b1d.png

anh ơi em chuyển rotation =0 nó vẫn nằm nguyên ah mà kết quả mong muốn nó nằm ngang cạnh dài hình chữ nhật bác ah

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
(defun c:test ( / ent goc)
(setq ent (entget (car (entsel "\nPick block mau:"))))
(setq goc (getreal "\nGoc<0>:"))
  (if (null goc) (setq goc 0))
(mapcar '(lambda (obj) (vla-put-Rotation obj goc))
       (mapcar 'vlax-ename->vla-object (ACET-SS-TO-LIST (ssget ( list (assoc 0 ent) (assoc 2 ent))))))      
  )

 

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

(defun c:test ( / ent goc)
(setq ent (entget (car (entsel "\nPick block mau:"))))
(setq goc (getreal "\nGoc<0>:"))
  (if (null goc) (setq goc 0))
(mapcar '(lambda (obj) (vla-put-Rotation obj goc))
       (mapcar 'vlax-ename->vla-object (ACET-SS-TO-LIST (ssget ( list (assoc 0 ent) (assoc 2 ent))))))      
  )

 

Vẫn không được anh ah. Vì các block của em hiện tại nó đều có góc xoay =0 rồi. Giò em muốn nằm ngang. Đây là các block khác nhau anh ah nó chỉ có hình dáng là giống nhau thôi

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

Cái này là các Block khác nhau, có hình dạng giống nhau. Góc của block đã là 0 rồi. Giờ phải xoay block đi góc khác 0. Sao cho cạnh của hình chữ nhật trong Block nằm ngang.

Tác giả sao chơi khó quá.

Cái này chắc đi theo hướng Replace Block chắc dễ hơn. Thay thế tất cả các Block giống nhau bằng 1 block (Có thể tạo Block mới đã xoay).

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-to-replace-block-with-another-block/td-p/8094625

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

Cái này là các Block khác nhau, có hình dạng giống nhau. Góc của block đã là 0 rồi. Giờ phải xoay block đi góc khác 0. Sao cho cạnh của hình chữ nhật trong Block nằm ngang.

Tác giả sao chơi khó quá.

Cái này chắc đi theo hướng Replace Block chắc dễ hơn. Thay thế tất cả các Block giống nhau bằng 1 block (Có thể tạo Block mới đã xoay).

https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-to-replace-block-with-another-block/td-p/8094625

dạ nếu thay thế bằng 1 block mới thì em lại có giải pháp ah. Em cần là nó xoay nằm ngang mà vẫn là block đó ah. 

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

Vẫn có thể làm được bằng cách truy cập vào block để tìm PolylineSegment (dài - thấp) nhất, tính góc  segment này để set giá trị native cho block rotation. Nhưng chẳng lẽ viết ra một đống code chỉ để giải quyết mấy thứ này. Vì nó cũng không áp dụng được cho trường hợp 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
9 phút trước, cuongtk2 đã nói:

Vẫn có thể làm được bằng cách truy cập vào block để tìm PolylineSegment (dài - thấp) nhất, tính góc  segment này để set giá trị native cho block rotation. Nhưng chẳng lẽ viết ra một đống code chỉ để giải quyết mấy thứ này. Vì nó cũng không áp dụng được cho trường hợp khác.

cảm ơn anh ah. Vậy em xoay thủ công cũng được anh ah

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
(defun c:test ( / ANG BLOCK CACDOAN COOD D DOANDAI ENT GOCBLOCK I LS N OBJ P1 P2 POINTPICK POSITION)
(setq ent (nentsel "\nPick block")))
(setq obj (vlax-ename->vla-object (car ent))
      block ( vlax-ename->vla-object (car(last ent)))
      pointpick (cadr ent)
      position (last (nth 2 ent))
      )
(setq cood (vlax-safearray->list(vlax-variant-value(vla-get-coordinates obj))))
(setq ls (list)
      n (length cood)
      i 0)
(while (< i (- n 1))
  (setq ls (append ls (list (list (nth i cood)(nth (+ i 1) cood))))
        )
  (setq i (+ i 2))
  )
(setq ls (append ls (list(car ls)))
      i 0
      n (length ls)
      cacdoan (list)
      )
(while (< i (- n 1))
  (setq p1 (nth i ls)
        p2 (nth (+ i 1) ls)
        d (distance p1 p2)
        ang (angle p1 p2)
        cacdoan (append cacdoan (list (list d ang)))
        )
  (setq i (1+ i))
  )

(setq doandai (last (vl-sort  cacdoan   '(lambda (s1 s2)   (< (car s1) (car s2))))))
(setq ang (nth 1 doandai)
      gocblock (vla-get-Rotation block))
(vla-put-Rotation block (- gocblock ang))
  )



 

Em tạm dùng thứ này

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, cuongtk2 đã nói:

(defun c:test ( / ANG BLOCK CACDOAN COOD D DOANDAI ENT GOCBLOCK I LS N OBJ P1 P2 POINTPICK POSITION)
(setq ent (nentsel "\nPick block")))
(setq obj (vlax-ename->vla-object (car ent))
      block ( vlax-ename->vla-object (car(last ent)))
      pointpick (cadr ent)
      position (last (nth 2 ent))
      )
(setq cood (vlax-safearray->list(vlax-variant-value(vla-get-coordinates obj))))
(setq ls (list)
      n (length cood)
      i 0)
(while (< i (- n 1))
  (setq ls (append ls (list (list (nth i cood)(nth (+ i 1) cood))))
        )
  (setq i (+ i 2))
  )
(setq ls (append ls (list(car ls)))
      i 0
      n (length ls)
      cacdoan (list)
      )
(while (< i (- n 1))
  (setq p1 (nth i ls)
        p2 (nth (+ i 1) ls)
        d (distance p1 p2)
        ang (angle p1 p2)
        cacdoan (append cacdoan (list (list d ang)))
        )
  (setq i (1+ i))
  )

(setq doandai (last (vl-sort  cacdoan   '(lambda (s1 s2)   (< (car s1) (car s2))))))
(setq ang (nth 1 doandai)
      gocblock (vla-get-Rotation block))
(vla-put-Rotation block (- gocblock ang))
  )



 

Em tạm dùng thứ này

Vẫn không được anh ơi. Nó báo dòng này anh ah

image.thumb.png.5394c297c953be0d3cfbf40fad47a64b.png

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

Lỗi thừa dấu ngoặc tại (setq ent (nentsel "\nPick block"))) , em xoá đi 1 cái bên phải

ok rồi anh ah. Cảm ơn anh 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

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

×