TuanDat2023 3 Báo cáo bài đăng Đã đăng Tháng 8 29 Em có 1 cái lisp rải taluy như này sưu tầm trên diễn đàn, muốn điểm chỉnh thêm mấy nội dung cho phù hợp với công việc: Thứ nhất là có thêm tùy chọn pick 2 điểm trên đường refence line chọn để nó chỉ rải taluy giữa 2 đường này Thứ hai là có thể chọn được số lượng vạch ngắn/ số lượng vạch dài ( kiểu như nó vẽ 3 vạch ngắn rồi mới vẽ 1 vạch dài ) (defun c:batter() (setvar "cmdecho" 0) (setvar "blipmode" 0) (setvar "aunits" 0) (setvar "angbase" (/ pi 2)) (setvar "angdir" 1) (if (not lint) (setq lint 2.0)) (setq int (getdist (strcat "\nInterval <" (rtos lint 2 2) ">: "))) (if int (setq lint int) (setq int lint)) (command "line" (list 0.0 0.0) (list 0.0 0.0001) "") (if (tblsearch "block" "tadtick") (command "block" "tadtick" "y" (list 0.0 0.0) (entlast) "") (command "block" "tadtick" (list 0.0 0.0) (entlast) "") ) (while (setq refent (entsel "\nSelect reference line: ")) (command "undo" "group") (redraw (car refent) 3) (initget 1 "Cut Fill") (setq reply (getkword "\n[C]ut or [F]ill batter: ")) (setq s (ssget)) (command "measure" refent "b" "tadtick" "y" int) (setq p (ssget "p") cn 0) (if s (progn (while (< cn (sslength p)) (setq en (entget (ssname p cn)) p0 (cdr (assoc 10 en)) pt1 p0 pt2 nil b (cdr (assoc 50 en))) (entdel (ssname p cn)) (setq p1 (polar p0 (+ (/ pi 2) b) 0.0001)) (command "line" p0 p1 "") (command "extend" s "" (list (entlast) p1) "") (setq xent (entget (entlast))) (setq xdist (distance (cdr (assoc 10 xent)) (cdr (assoc 11 xent)))) (if (not (equal xdist 0.0001 0.0001)) (setq pt2 (cdr (assoc 11 xent))) (progn (command "extend" s "" (list (entlast) p0) "") (setq xent (entget (entlast))) (setq xdist (distance (cdr (assoc 10 xent)) (cdr (assoc 11 xent)))) (if (not (equal xdist 0.0001 0.0001)) (setq pt2 (cdr (assoc 10 xent))) ) ) ) (entdel (entlast)) (if pt2 (if (= reply "Fill") (if (= (rem cn 2) 0) (command "line" pt1 pt2 "") (command "line" pt1 (polar pt1 (angle pt1 pt2) (/ (distance pt1 pt2) 2)) "") ) (if (= (rem cn 2) 0) (command "line" pt2 pt1 "") (command "line" pt2 (polar pt2 (angle pt2 pt1) (/ (distance pt2 pt1) 2)) "") ) ) ) (setq cn (1+ cn)) ) ) ) (command "undo" "en") ) (setvar "blipmode" 1) (princ) ) (prompt "\nDraw cut/fill batter slope lines.") (defun c:bat1 ( / mode) (setq mode (getvar "osmode")) (setvar "osmode" 0) (c:batter) (setvar "blipmode" 0) (setvar "osmode" mode) ) Em cảm ơn các bác đã bớt chút ít thời gian đọc bài ạ ! 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