Thứ Sáu, 11 tháng 9, 2009

Lisp giống ALGIN nhưng áp dụng cho vòng lặp:

Có khi bạn cần dùng lệnh ALGIN một đối tượng làm nhiều lần vào nhiều vị trí nhưng cứ gỏ lại lệnh, chọn đối tượng và chọn 2 điểm nguồn hoài thì phiền. Vậy bạn dùng lisp sau nhé:
Bạn copy nội dung và tạo file lisp hay tải file về cũng được!

(Defun C:NAL ( )
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
(setq donvi (/ (getvar "viewsize") 50))


(Princ "\nHay chon doi tuong :")
(setq XX (ssget))
(setq diem1 (getpoint "\nDiem chuan thu nhat: "))
(setq diemvt1 (polar diem1 pi donvi))
(setq diemvt2 (polar diem1 (* 2 pi) donvi))
(setq diemvt3 (polar diem1 (/ pi 2) donvi))
(setq diemvt4 (polar diem1 (- 0 (/ pi 2)) donvi))
(grdraw diemvt1 diemvt2 3)
(grdraw diemvt3 diemvt4 3)
(setq diem2 (getpoint "\nDiem chuan thu hai: "))
(setq diemvt12 (polar diem2 pi donvi))
(setq diemvt22 (polar diem2 (* 2 pi) donvi))
(setq diemvt32 (polar diem2 (/ pi 2) donvi))
(setq diemvt42 (polar diem2 (- 0 (/ pi 2)) donvi))
(grdraw diemvt12 diemvt22 3)
(grdraw diemvt32 diemvt42 3)

(setq diem1m (getpoint diem1"\nDiem dich thu nhat: "))
(grdraw diem1 diem1m 9 -1)
(setq diem2m (getpoint diem2"\nDiem dich thu hai: "))
(grdraw diem2 diem2m 9 -1)

(setq daichuan (distance diem1 diem2))
(setq gocchuan(angle diem1 diem2))

(setq daimoi (distance diem1m diem2m))
(setq gocmoi(angle diem1m diem2m))

(setq goctinh (- gocmoi gocchuan))
(setq diem3 (polar diem1m goctinh 100))
(setq tilethu (/ daimoi daichuan))


(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)


(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname xx L))
(command ".copy" DT "" diem1 diem1m)
(command ".rotate" "last" "" diem1m diem3)
(command ".scale" "last" "" diem1m tilethu)
(setq L (1+ L))
)

(command ".pan" diem1 diem1)

(setvar "osmode" luubatdiem)

(while
(setq diem1m (getpoint diem1"\nChon diem thu nhat tiep theo : "))
(grdraw diem1 diem1m 9 -1)
(setq diem2m (getpoint diem2"\nChon diem thu hai tiep theo"))
(grdraw diem2 diem2m 9 -1)
(laplaialing)
)

(Princ)
)

;;;;;;;;;;;;;;
(defun laplaialing ()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)

(setq daimoi (distance diem1m diem2m))
(setq gocmoi(angle diem1m diem2m))

(setq goctinh (- gocmoi gocchuan))
(setq diem3 (polar diem1m goctinh 100))
(setq tilethu (/ daimoi daichuan))

(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DT (ssname xx L))
(command ".copy" DT "" diem1 diem1m)
(command ".rotate" "last" "" diem1m diem3)
(command ".scale" "last" "" diem1m tilethu)
(setq L (1+ L))
)

(command ".pan" diem1 diem1)

(setvar "osmode" luubatdiem)
(Princ)
)



Tên lệnh: NAL (new algin)
-Thao tác:
1.Nhập lệnh: NAL => hỏi chọn đối tượng.
2.Chọn điểm chuẩn thứ nhất : xuất hiện dấu + màu xanh lá tại điểm bạn chọn (màu mè thôi để bạn thấy là mình đã chọn được 1 điểm).
3.Chọn điểm chuẩn thứ hai (cái này khác AL nhưng bạn sẽ thấy như vậy hợp lý hơn với thao tác bạn yêu cầu).
4.Chọn điểm đích thứ nhất (có 1 đường màu xám nét đứt nối điểm chuẩn thứ nhất và điểm đích thứ nhất, cũng là màu mè thôi!)
5.Chọn điểm đích thứ hai (có 1 đường màu xám nét đứt nối điểm chuẩn thứ hai và điểm đích thứ hai) lúc này lisp sẽ COPY các đối tượng bạn chọn từ điểm chuẩn thứ nhất đến điểm đích thứ nhất, ROTATE và SCALE đối tượng như kết quả của lệnh AL.
6.Lisp lại hỏi bạn chọn điểm đích thứ nhất hoặc nhấn enter để kết thúc. Bạn cứ thế mà phát triển (đối tượng và điểm chuẩn thứ nhất, thứ hai đã lưu lại trong đoạn trước, bây giờ chỉ chọn 2 điểm đích, chọn chon và chọn vậy thôi).

Không có nhận xét nào:

Đăng nhận xét