Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
TuanDat2023

[Nhờ các bác] ĐIều chỉnh lisp rải taluy

Các bài được khuyến nghị

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×