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

Dạ nhờ ae diễn đàn giúp mình 1 lisp đối xứng với ạ. yêu cầu là :

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

(defun C:MIRRORCENTER (/ cmde osmode mirrtext ss inc ent minpt maxpt center axis point2)
  ;; Lưu lại trạng thái ban đầu của cmdecho, osnap và MIRRTEXT
  (setq cmde    (getvar 'cmdecho))
  (setq osmode  (getvar 'osmode))
  (setq mirrtext (getvar "MIRRTEXT"))
  (setvar 'cmdecho 0)
  (setvar 'osmode 0)
  (setvar "MIRRTEXT" 0)  ; Tắt lật chữ khi mirror
  
  (command "_.undo" "_begin")
  
  ;; Yêu cầu người dùng nhập trục phản chiếu
  (setq axis (strcase (getstring "\nNhập trục phản chiếu (X/Y): ")))
  
  (if (member axis '("X" "Y"))
    (progn
      ;; Chọn đối tượng cần mirror
      (setq ss (ssget))
      (if ss
        (progn
          (repeat (setq inc (sslength ss))
            (setq ent (ssname ss (setq inc (1- inc))))  ; Lấy từng đối tượng trong tập hợp
            (vla-getboundingbox (vlax-ename->vla-object ent) 'minpt 'maxpt)  ; Lấy bounding box
            (setq center
              (mapcar '/
                (mapcar '+ (vlax-safearray->list minpt) (vlax-safearray->list maxpt))
                '(2 2 2)
              )
            )
            (setq point2
              (cond
                ((equal axis "X") (list (+ (car center) 0.1) (cadr center) (caddr center)))
                ((equal axis "Y") (list (car center) (+ (cadr center) 0.1) (caddr center)))
              )
            )
            (command "_.mirror" ent "" center point2 "_N")
          )
          (princ "\nPhản chiếu đối xứng qua tâm đã hoàn tất.")
        )
        (princ "\nKhông có đối tượng hợp lệ được chọn.")
      )
    )
    (princ "\nTrục không hợp lệ. Hãy nhập X hoặc Y.")
  )
  
  (command "_.undo" "_end")
  (setvar 'cmdecho cmde)
  (setvar 'osmode osmode)
  (setvar "MIRRTEXT" mirrtext)
  (princ)
)
(vl-load-com)
(prompt "\nGọi MIRRORCENTER để phản chiếu đối xứng qua tâm.")
 

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

Yêu cầu là khi MI thì chữ không bị lật, kể cả các chữ trong block.

Ở trên là e copy của 1 bạn trong diễn đàn mình và nhờ AI sửa lại nhưng ko chạy được.

Mong bác nào giúp e trường hợp này với ạ. Em cảm ơn

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
13 giờ trước, CadExTools đã nói:

ktra biến MIRRTEXT, gán =0 nhé

Mình có nhập thử rồi á nhưng vẫn ko đ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

Trong lisp đã có sẵn dòng  (setvar "MIRRTEXT" 0) rồi nên không cần gõ lệnh nữa.

Chữ trong Block muốn không ngược thì điều kiện đầu tiên đó là ATT chứ không phải text

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

×