Lisp rải đối tượng theo đơờng dẩn. - CADViet forum

By Nặc danh - tháng 6 08, 2011


*Lâu nay dùng cái MEASURE và DIVIDE của cad thấy có vài hạn chế:
-Chỉ rải được point và block.
-Block thỉ phải gỏ tên và được chèn ra với tỉ lệ 1/1.
-Bỏ qua không chèn vào vị trí xuất phát của đường dẩn.
*Dựa trên cái lisp xác định điểm của bác SSG cho mình cải tạo và nhập chung thành 1 lệnh tác dụng tương đương và cải thiện các nhược điểm mình nêu trên: (à nghe bảo cad12 đã kết hợp array theo đường dẩn nhưng mình chưa tiếp xúc nên ko biết có bị dẩm lên đó ko nhưng đây là thử nghiệm vì mình tính cho xác định điểm bắt đầu và hướng rải nửa nhưng chưa nghỉ ra kịch bản vì có quá nhiều thường hợp muốn)
-Tên lệnh: RDT (rải đối tượng)
-Hỏi chọn đối tượng muốn rải: Bạn chọn thoải mái bằng các kiểu (đối tượng gì cũng được) kết thúc chọn bằng enter.
+Nếu bạn chọn hơn 1 đối tượng thì sẽ hỏi bạn chọn điểm chuẩn cho nhóm đối tượng này (dùng để làm điểm đặt trên đường dẩn í).
+Nếu bạn chọn 1 đối tượng thì sẽ xem nếu đối tượng không phải là block thì vẩn hỏi chọn điểm chuẩn, Nếu đối tượng là block thì bỏ qua phần hỏi chọn điểm chuẩn mà lấy điểm chèn của block đó làm điểm chuẩn.
-Hỏi chọn đường dẩn dùng để rải.
-Hỏi “Kieu rai theo: So luong/” :
+Rải theo số lượng thì nhập S enter.
+Rải theo khoảng cách thì nhập K enter hoặc enter không (thực chất cứ nhập vào khác S thì nhận là khoảng cách).
-Tùy theo lựa chọn mà hỏi khoảng cách rải hay số lượng rải.
-Hỏi“Co quay doi tuong vuong goc voi duong dan khong: Khong/") :
+Không quay đối tượng cho vuông gó với đường dẩn thì nhập K enter.
+Có quay thì nhập C en ter hoặc enter không (thực chất cứ nhập vào khác K thì nhận là có).
*Xong rồi. Bác nào có nhu cầu thì dùng không có thì dòm. Mong không ném đá hoặc dè bỉu. :P

file: rdt.lsp
(Defun c:rdt (/ ss) (command "undo" "be") (chonnhomdoituong) (choncuver) (hoikieurai) (command "undo" "end") (princ) ) ;;;;;;;;;;;;;;;;; (Defun chonnhomdoituong () (princ "\nChon doi tuong rai:") (setq ss (ssget)) (cond ((= ss nil) (princ "\nChua chon duoc doi tuong nao:") (chonnhomdoituong)) ((/= ss nil) (setq dsl (sslength ss)) (cond ((= dsl 1) (setq doituong (ssname SS 0)) (setq doituong (entget doituong)) (setq KIEUDOITUONG (cdr (assoc 0 doituong))) (cond ((= KIEUDOITUONG "INSERT") (setq dc (cdr (assoc 10 doituong)))) ((/= KIEUDOITUONG "INSERT") (setq dc (getpoint "\nChon diem goc: "))) );ketthuccondxemblock );kethucdsl1 ((/= dsl 1) (setq dc (getpoint "\nChon diem goc: "))) );ketthuccondnho );ketthucsetqdsl );ketthuccondtong (princ) ) ;;;;;;;;;;;;;;;;; (Defun choncuver () (setq ddd (entsel "\nChon duong dan:")) (while (or (null ddd) (or (= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (= "HATCH" (cdr (assoc 0 (entget (car ddd))))) (= "INSERT" (cdr (assoc 0 (entget (car ddd))))) (= "REGION" (cdr (assoc 0 (entget (car ddd))))) (= "DIMENSION" (cdr (assoc 0 (entget (car ddd))))) ) ) (setq ddd (entsel "\nDoi tuong khong the lam duong dan! Chon lai")) ) (setq chondd (car ddd)) (setq luubatdiem (getvar "osmode")) (setvar "osmode" 0) (setq chieudaicuver (vlax-curve-getDistAtParam chondd (vlax-curve-getEndParam chondd))) (setq diemdau (vlax-curve-getPointAtDist chondd 0)) (setq diemcuoi (vlax-curve-getPointAtDist chondd chieudaicuver)) (setvar "osmode"luubatdiem) (princ) ) ;;;;;;;;;;;;;;;;; (Defun hoikieurai (/ kieurai) (setq krai (strcase (getstring "\nKieu rai theo: So luong/"))) (Cond ((= krai "S") (raisoluong)) ((/= krai "S")(raikhoangcach)) ) (princ) ) ;;;;;;;;;;;;;; (Defun raikhoangcach () (setq chieudaidoan (GETDIST "\nKhoang cach doan chia: ")) (setq sol (+ (/ chieudaicuver chieudaidoan) 1)) (setq sl (fix sol)) (setq sl (fix sl)) (thuchienrai) (princ) ) ;;;;;;;;;;;;;; (Defun raisoluong () (setq slc (getreal "\nChia duong dan thanh may lan:")) (setq chieudaidoan (/ chieudaicuver slc)) (setq sl (fix (+ 1 slc))) (thuchienrai) (princ) ) ;;;;;;;;;;;;;; (Defun thuchienrai (/ quaykhong) (setq quaykhong (strcase (getstring "\nCo quay doi tuong vuong goc voi duong dan khong: Khong/"))) (Cond ((= quaykhong "K") (setq copygiua copykoquay)) ((/= quaykhong "K")(setq copygiua copyquay)) ) (setq index -1) (repeat sl (setq index (1+ index)) (setq d2 (* chieudaidoan index)) (setq luubatdiem (getvar "osmode")) (setvar "osmode" 0) (setq p2 (vlax-curve-getPointAtDist chondd d2)) (setvar "osmode"luubatdiem) (copygiua) ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;; (defun copycuoiquay() (setq luubatdiem (getvar "osmode")) (setvar "osmode" 0) (setq d5 (- chieudaicuver 0.001)) (setq p5 (vlax-curve-getPointAtDist chondd d5)) (setq L 0) (setq M (sslength ss)) (while (< L M) (setq DT (ssname ss L)) (command ".copy" DT "" dc p5) (command ".rotate" "last" "" diemcuoi p5) (command ".rotate" "last" "" diemcuoi 180) (setq L (1+ L)) ) (setvar "osmode"luubatdiem) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;; (defun COPYQUAY(/ p3) (setq luubatdiem (getvar "osmode")) (setvar "osmode" 0) (setq d3 (+ (* chieudaidoan index) 0.001)) (setq p3 (vlax-curve-getPointAtDist chondd d3)) (setvar "osmode"luubatdiem) (Cond ((= p3 nil) (copycuoiquay)) ((/= p3 nil) (setq L 0) (setq M (sslength ss)) (setq luubatdiem (getvar "osmode")) (setvar "osmode" 0) (while (< L M) (setq DT (ssname ss L)) (command ".copy" DT "" dc p2) (command ".rotate" "last" "" p2 p3) (setq L (1+ L)) ) (setvar "osmode"luubatdiem) ) ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;; (defun COPYKOQUAY() (setq luubatdiem (getvar "osmode")) (setvar "osmode" 0) (command ".copy" ss "" dc p2 "") (setvar "osmode"luubatdiem) (princ) ) ;;;;;;;;;;;;;;


Khi mình xem bài này với vai trò khách thì thấy có hộp code đàng hoàng nhưng đăng nhập vào thì không hiển thị hộp code (chỉ với bài này thôi còn các bài của các bác khác thì vẩn hiển thị bình thường)!

Theo cadviet

  • Share:

You Might Also Like

0 Comments

Vui lòng viết tiếng Việt có dấu!!!