SWAP (Đổi vị trí)
Dưới đây là một đoạn lệnh AutoLISP có thể giúp bạn hoán đổi vị trí của hai đối tượng bất kỳ được chọn trong bản vẽ AutoCAD. Lệnh này sẽ lấy tọa độ tâm (Centroid/Insertpoint/Midpoint) của hai đối tượng và di chuyển chúng đến vị trí của nhau.
Hàm lấy điểm tham chiếu
Code:
; Hàm lấy điểm tham chiếu của đối tượng (defun get-reference-point (obj / minpt maxpt midpt) (cond ((vlax-property-available-p obj 'Centroid) ; Nếu có Centroid (vlax-get obj 'Centroid)) ((vlax-property-available-p obj 'InsertionPoint) ; Nếu có InsertionPoint (vlax-get obj 'InsertionPoint)) ((vlax-property-available-p obj 'StartPoint) ; Nếu là đường thẳng/cung (setq midpt (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-get obj 'StartPoint) (vlax-get obj 'EndPoint))) midpt) (t ; Nếu không có điểm đặc trưng, lấy tâm của bounding box (vla-getboundingbox obj 'minpt 'maxpt) (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-safearray->list minpt) (vlax-safearray->list maxpt))) ) )
1 Thêm Lisp AJS_SWAP.lsp
Lưu mã sau dưới dạng tệp tin AJS_.lsp
Code:
(defun C:SWAP (/) (vl-load-com) ; Tải các hàm ActiveX để sử dụng (defun sleep_osnap ()(setvar "OSMODE" (logior (getvar "OSMODE") 16384))) (defun wake_osnap ()(setvar "OSMODE" (logand (getvar "OSMODE") -16385))) (sleep_osnap) (princ "\nChọn đối tượng thứ nhất: ") (setq ent1 (ssget ":S")) ; Chọn một đối tượng duy nhất (if ent1 (progn (princ "\nChọn đối tượng thứ hai: ") (setq ent2 (ssget ":S")) ; Chọn đối tượng thứ hai (if ent2 (progn ; Lấy thực thể từ tập hợp lựa chọn (setq ent1 (ssname ent1 0)) (setq ent2 (ssname ent2 0)) (setq obj1 (vlax-ename->vla-object ent1)) (setq obj2 (vlax-ename->vla-object ent2)) ; Hàm lấy điểm tham chiếu của đối tượng (defun get-reference-point (obj / minpt maxpt midpt) (cond ((vlax-property-available-p obj 'Centroid) ; Nếu có Centroid (vlax-get obj 'Centroid)) ((vlax-property-available-p obj 'InsertionPoint) ; Nếu có InsertionPoint (vlax-get obj 'InsertionPoint)) ((vlax-property-available-p obj 'StartPoint) ; Nếu là đường thẳng/cung (setq midpt (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-get obj 'StartPoint) (vlax-get obj 'EndPoint))) midpt) (t ; Nếu không có điểm đặc trưng, lấy tâm của bounding box (vla-getboundingbox obj 'minpt 'maxpt) (mapcar '(lambda (x y) (/ (+ x y) 2.0)) (vlax-safearray->list minpt) (vlax-safearray->list maxpt))) ) ) ; Lấy điểm tham chiếu của hai đối tượng (setq pt1 (get-reference-point obj1)) (setq pt2 (get-reference-point obj2)) ; Di chuyển đối tượng thứ nhất đến vị trí của đối tượng thứ hai (command "_.MOVE" ent1 "" pt1 pt2) ; Di chuyển đối tượng thứ hai đến vị trí của đối tượng thứ nhất (command "_.MOVE" ent2 "" pt2 pt1) (princ "\nĐã hoán đổi vị trí hai đối tượng!") ) (princ "\nKhông chọn được đối tượng thứ hai!") ) ) (princ "\nKhông chọn được đối tượng thứ nhất!") ) (wake_osnap) (princ "\nBy AJS at www.lisp.vn") (princ) )
Cách sử dụng:
- Sao chép đoạn mã trên vào một tệp có đuôi .lsp (ví dụ: AJS Swap.lsp).
- Mở AutoCAD, gõ APPLOAD để tải tệp AJS SWAP.lsp.
- Gõ SWAP vào dòng lệnh và nhấn Enter.
- Chọn lần lượt hai đối tượng cần hoán đổi vị trí.
Link tải (MediaFire)
---------------------------------------------------------------------------------------------
Mọi thông tin xin liên hệ Fanpage AutoLISP Thật là đơn giản!
Cảm ơn bạn đã theo dõi!
Không có nhận xét nào:
Đăng nhận xét