Xin chia sẻ các bạn lệnh lisp array nâng cao trong autocad, ứng dụng rất nhiều trong xây dựng cơ khí điện tử, lệnh này mình sử dụng rất nhiều trong ngành nghề của mình
Lisp array nâng cao này tùy vào khả năng ứng dụng riêng của mõi người, mình sẽ demo phương pháp sử dụng cho bạn hiểu hơn
Xem thêm: Lisp xóa nhanh trong autocad
Lisp array nâng cao trong autocad
+ Cách sử dụng
- Select đối tượng và gõ lệnh arf
- Base point (P0) : là chọn điểm tâm
- Px : Array trục x kích thước bao nhiêu
- Py : Array trục y kích thước bao nhiêu
+ Code
(defun c:arf ( / ss->list copyv dx dy gr i1 i2 nx ny obs obx oby p0 px py vx vy ) (vl-load-com)
(defun ss->list ( ss / i l )
(if ss
(repeat (setq i (sslength ss))
(setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
)
)
)
(defun copyv ( ob n v / i b l ) (setq i 1 b (vlax-3D-point '(0. 0. 0.)))
(repeat n
(foreach obj ob
(vla-move (car (setq l (cons (vla-copy obj) l))) b (vlax-3D-point (mapcar '* v (list i i i))))
)
(setq i (1+ i))
)
l
)
(if
(and
(setq obs (ss->list (ssget '((0 . "~VIEWPORT")))))
(setq p0 (getpoint "\nBase Point (P0): "))
(setq px (getpoint "\nArray X-Vector (Px): " p0))
(setq py (getpoint "\nArray Y-Vector (Py): " p0))
)
(progn
(setq vx (mapcar '- px p0) dx (distance '(0. 0. 0.) vx)
vy (mapcar '- py p0) dy (distance '(0. 0. 0.) vy)
)
(princ "\nArray Endpoint: ")
(while (= 5 (car (setq gr (grread 't 13 0)))) (redraw)
(setq obx (car (mapcar 'vla-delete obx))
oby (car (mapcar 'vla-delete oby))
gr (mapcar '- (cadr gr) p0)
i1 (inters '(0. 0. 0.) vx gr (mapcar '+ gr vy) nil)
i2 (inters '(0. 0. 0.) vy gr (mapcar '+ gr vx) nil)
nx (fix (/ (caddr (trans i1 1 vx)) dx))
ny (fix (/ (caddr (trans i2 1 vy)) dy))
obx (copyv obs (abs nx) (mapcar (if (minusp nx) '- '+) vx))
oby (copyv (append obs obx) (abs ny) (mapcar (if (minusp ny) '- '+) vy))
)
(grvecs (list -3 '(0. 0. 0.) i1 i1 gr '(0. 0. 0.) i2 i2 gr)
(list
(list 1. 0. 0. (car p0))
(list 0. 1. 0. (cadr p0))
(list 0. 0. 1. (caddr p0))
(list 0. 0. 0. 1.)
)
)
)
)
)
(redraw) (princ)
)
Cập nhật lúc 11:28 – 28/01/2017