Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết Lisp theo yêu cầu

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

Mình thấy ở đây có khá nhiều bạn quan tâm đến lisp.

Mời các bạn tích cực tham gia đóng góp xây dựng bảng "Nội dung và cấu trúc chương trình" của CadViet Utility.

  • Vote tăng 1
  • Vote giảm 1

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

Đọc bên trang tính tổng chiều dài các đoạn thẳng , tôi thấy rất hay và có ý tưởng thực tế trong công việc và muốn có 2 lisp nhằm 2 mục đích sau ( cho TKế đường ống cấp thoát nước ):

1. Ghi chú các đoạn ống ở giũa các đoạn ống( gồm : Đường kính ống - chiều dài - độ dốc ống )

2. Thống kê số lượng đường ống theo Đường kính và loại ống ( các loại thông dụng như PVC , Sắt tráng kẽm , ống BTCT , ống sành)

Hơn nữa chiều dài các đoạn ống có tính sẵn tròn hao hụt luôn , cụ thể như ống BTCT mà tính bằng cm thì khó chấp nhận , phải tính tròn là m , còn các ống nhựa , sắt có cộng thêm hao hụt và làm tròn cm.

Hình kèm:N01.jpg ,Cám ơn các bạn

Tôi cũng viết thử nhưng chưa ngon lắm nhờ bác giúp sữa .

http://www.cadviet.com/sub/hupload.php?fok=Ong_nuoc_3.rar

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

Nói ra ngại quá ... em là lính mới nên có bác nào chỉ em cách add LSP , VLX ... nhúng cào cad ko ...

Nhân tiện chỉ cho em cách dấu hay xóa cái ... à bấm f2 thì hiện ra những tác vụ đã làm , muốn bản vẽ của ta không ai coppy được thí sao nhỉ ,,, hì :s_dead:

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

Nhờ các bác viết giúp cái hộp thoại cho cái lệnh này của em, có một số ý muốn như thế này:

-Cố gắng giữ nguyên các câu lệnh của em chỉ sửa những chổ cần thiết

-Dùng thuần lisp giúp em vì em không biết VBA.

-Hình dáng hộp thoại gồm:

+03 imagebutton thể hiện 03 loại thép hình.

+03 nút : Chèn tiêu đề; kẻ bảng; chọn và hủy bỏ.

-Hộp thoại dùng các file: SLD rời đừng gộp chung lại (để em còn phát triển).

-Khi chọn 1 ảnh song bấm enter thì thực thi giống như chọn nút ok.

-Nhớ vị trí ảnh chọn ở lần gọi lệnh sau.

-Mổi ảnh và nút có thể chọn bằng chử ở bàn phím.

-Tạo giúp em cái vòng lặp khi thực hiện xong lệnh sẽ tiếp tục quay lại.

Cảm ơn các bác nhiều.

 


 (Defun C:tkth ( )   
(setvar "MODEMACRO" "THONG KE THEP HINH")
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
  (setq lc (strcase (getstring "\nCac lua chon :Tieu de/Ke khung/thepVuong/thepL/thepC:")))
  (if (= lc "t")
        (progn
 (setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "INSERT" "tieudel" (list (+ x 0)(- y 0)) 1 1 0)
 (command "-layer" "new" "Cat-20" "color" "20" "cat-20" "")
 (command "-layer" "set" "Cat-20" "")
(command "LINE"(list (+ x 0) (- y 1500)) (list (+ x 0) (+ y 0))
(list (+ x 13214) (+ y 0)) (list (+ x 13214) (- y 1500)) "")
 (traos)

)
)
  (if (= lc "T")
        (progn
 (setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "INSERT" "tieudel" (list (+ x 0)(- y 0)) 1 1 0)
 (command "-layer" "new" "Cat-20" "color" "20" "cat-20" "")
 (command "-layer" "set" "Cat-20" "")
(command "LINE"(list (+ x 0) (- y 1500)) (list (+ x 0) (+ y 0)) 
 (list (+ x 13214) (+ y 0)) (list (+ x 13214) (- y 1500)) "")
 (traos)

)
)
  (if (= lc "k")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "-layer" "new" "Cat-20" "color" "20" "cat-20" "")
 (setq s (getreal "\nSo luong hang: "))
 (setq h (* s 600))
 (setq z (* s 300))
 (command "-layer" "set" "Cat-20" "")
 (command "LINE"(list (+ x 0) (- y 0)) (list (+ x 0) (- y h)) "")
 (command "LINE"(list (+ x 13214) (- y 0)) (list (+ x 13214) (- y h)) "")
 (traos)
 (luuos)
 (setvar "osmode" 0)
 (command "LINE"(list (+ x 2000) (- y 0)) (list (+ x 2000) (- y h)) "")
 (command "LINE"(list (+ x 4925) (- y 0)) (list (+ x 4925) (- y h)) "")
 (command "LINE"(list (+ x 7261) (- y 0)) (list (+ x 7261) (- y h)) "")
 (command "LINE"(list (+ x 8610) (- y 0)) (list (+ x 8610) (- y h)) "")
 (command "LINE"(list (+ x 11214) (- y 0)) (list (+ x 11214) (- y h)) "")
 (command "LINE"(list (+ x 1200) (- y 0)) (list (+ x 1200) (- y h)) "")
 (command "TRIM" "last" "" "f" (list (+ x 1) (- y 1)) (list (+ x 1) (+ (- y h) 1)) "" "")
 (command "INSERT" "vitrichuthep" (list (+ x 950)(- y z)) 1 1 90)
 (setq w (getstring 5"\nSo luong cau kien : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 950)(- y z)) 250 90 "(     CK)")
 (command "TEXT" "c" (list (+ x 950)(- y z 250)) 250 90 w)
 ;(command "INSERT" "vitrichuthep" (list (+ x 500)(- y z)) 1 1 90)
 (princ "\nChon mau lop :")
 ;(setq t (getstring 5"\nTen cau kien : "))
 ;(command "UNDO" "")
 (command "TEXT" "c" (list (+ x 500)(- y z)) 250 90 "TEÂN")
 (command "ddedit" "last" "")
 (traos)

)
)
  (if (= lc "K")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "-layer" "new" "Cat-20" "color" "20" "cat-20" "")
 (setq s (getreal "\nSo luong hang: "))
 (setq h (* s 600))
 (setq z (* s 300))
 (command "-layer" "set" "Cat-20" "")
 (command "LINE"(list (+ x 0) (- y 0)) (list (+ x 0) (- y h)) "")
 (command "LINE"(list (+ x 13214) (- y 0)) (list (+ x 13214) (- y h)) "")
 (traos)
 (luuos)
 (setvar "osmode" 0)
 (command "LINE"(list (+ x 2000) (- y 0)) (list (+ x 2000) (- y h)) "")
 (command "LINE"(list (+ x 4925) (- y 0)) (list (+ x 4925) (- y h)) "")
 (command "LINE"(list (+ x 7261) (- y 0)) (list (+ x 7261) (- y h)) "")
 (command "LINE"(list (+ x 8610) (- y 0)) (list (+ x 8610) (- y h)) "")
 (command "LINE"(list (+ x 11214) (- y 0)) (list (+ x 11214) (- y h)) "")
 (command "LINE"(list (+ x 1200) (- y 0)) (list (+ x 1200) (- y h)) "")
 (command "TRIM" "last" "" "f" (list (+ x 1) (- y 1)) (list (+ x 1) (+ (- y h) 1)) "" "")
 (command "INSERT" "vitrichuthep" (list (+ x 950)(- y z)) 1 1 90)
 (setq w (getstring 5"\nSo luong cau kien : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 950)(- y z)) 250 90 "(     CK)")
 (command "TEXT" "c" (list (+ x 950)(- y z 250)) 250 90 w)
 ;(command "INSERT" "vitrichuthep" (list (+ x 500)(- y z)) 1 1 90)
 (princ "\nChon mau lop :")
 ;(setq t (getstring 5"\nTen cau kien : "))
 ;(command "UNDO" "")
 (command "TEXT" "c" (list (+ x 500)(- y z)) 250 90 "TEÂN")
 (command "ddedit" "last" "")
 (traos)

)
)
        (if (= lc "l")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s )
 (command "TEXT" "c" (list (+ x 3446)(- y 450)) 250 0 "L     *     *")
 (command "INSERT" "vitrichuthep" (list (+ x 3082)(- y 450)) 1 1 0)
 (setq d (getreal "\nCanh thu nhat : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3082)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 3791)(- y 450)) 1 1 0)
 (setq b (getreal "\nCanh thu hai : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3791)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 4404)(- y 450)) 1 1 0)
 (setq w (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4404)(- y 450)) 250 0 (fix w))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
 (command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (+ d b ))
 (setq k (* w r))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 100000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (traos)
)
)


        (if (= lc "L")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
 (setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s)
 (command "TEXT" "c" (list (+ x 3446)(- y 450)) 250 0 "L     *     *")
 (command "INSERT" "vitrichuthep" (list (+ x 3082)(- y 450)) 1 1 0)
 (setq d (getreal "\nCanh thu nhat : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3082)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 3791)(- y 450)) 1 1 0)
 (setq b (getreal "\nCanh thu hai : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3791)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 4404)(- y 450)) 1 1 0)
 (setq w (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4404)(- y 450)) 250 0 (fix w))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
 (command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (+ d b ))
 (setq k (* w r))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 100000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (traos)
)
)


        (if (= lc "O")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
(setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s)
 (command "TEXT" "c" (list (+ x 3250)(- y 450)) 250 0 "%%254=        -DAØY")
 (command "INSERT" "vitrichuthep" (list (+ x 3000)(- y 450)) 1 1 0)
 (setq d (getreal "\nDuong kinh : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3000)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 4550)(- y 450)) 1 1 0)
 (setq b (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4550)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
(command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (* pi d))
 (setq k (* r b ))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 50000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (traos)
)
)
        (if (= lc "v")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
(setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s)
 (command "TEXT" "c" (list (+ x 3446)(- y 450)) 250 0 "[]     *     *")
 (command "INSERT" "vitrichuthep" (list (+ x 3082)(- y 450)) 1 1 0)
 (setq d (getreal "\nCanh thu nhat : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3082)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 3791)(- y 450)) 1 1 0)
 (setq b (getreal "\nCanh thu hai : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3791)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 4404)(- y 450)) 1 1 0)
 (setq w (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4404)(- y 450)) 250 0 (fix w))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
(command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (+ d b ))
 (setq k (* w r))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 50000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (traos)
)
)

        (if (= lc "V")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
(setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s)
 (command "TEXT" "c" (list (+ x 3446)(- y 450)) 250 0 "[]     *     *")
 (command "INSERT" "vitrichuthep" (list (+ x 3082)(- y 450)) 1 1 0)
 (setq d (getreal "\nCanh thu nhat : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3082)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 3791)(- y 450)) 1 1 0)
 (setq b (getreal "\nCanh thu hai : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3791)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 4404)(- y 450)) 1 1 0)
 (setq w (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4404)(- y 450)) 250 0 (fix w))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
(command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (+ d b ))
 (setq k (* w r))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 50000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (traos)
)
)

        (if (= lc "c")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
(setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s)
 (command "TEXT" "c" (list (+ x 3400)(- y 450)) 250 0 "C      *     *")
 (command "INSERT" "vitrichuthep" (list (+ x 3082)(- y 450)) 1 1 0)
 (setq d (getreal "\nCanh dai : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3082)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 3791)(- y 450)) 1 1 0)
 (setq b (getreal "\nCanh ngan : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3791)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 4404)(- y 450)) 1 1 0)
 (setq w (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4404)(- y 450)) 250 0 (fix w))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
 (command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (+ d b b ))
 (setq k (* w r))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 100000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (traos)
)
)

       (if (= lc "C")
        (progn
 (command "-style" "thep" "VNI-HELVE" "0" "1" "0" "n" "n")
(setq a (getpoint "\nChon diem tren ben trai: "))
 (setq x (car a))
 (setq y (cadr a))
 (luuos)
 (setvar "osmode" 0)
 (command "LINE"(list (+ x 0) (- y 600)) (list (+ x 13214) (- y 600)) "")
 (command "INSERT" "vitrichuthep" (list (+ x 1600)(- y 450)) 1 1 0)
 (setq s (getstring 5"\nSo thu tu : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 1600)(- y 450)) 250 0 s)
 (command "TEXT" "c" (list (+ x 3400)(- y 450)) 250 0 "C      *     *")
 (command "INSERT" "vitrichuthep" (list (+ x 3082)(- y 450)) 1 1 0)
 (setq d (getreal "\nCanh dai : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3082)(- y 450)) 250 0 (fix d))
 (command "INSERT" "vitrichuthep" (list (+ x 3791)(- y 450)) 1 1 0)
 (setq b (getreal "\nCanh ngan : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 3791)(- y 450)) 250 0 (fix b ))
 (command "INSERT" "vitrichuthep" (list (+ x 4404)(- y 450)) 1 1 0)
 (setq w (getreal "\nDo day : "))
 (command "UNDO" "")
 (command "TEXT" "c" (list (+ x 4404)(- y 450)) 250 0 (fix w))
 (command "INSERT" "vitrichuthep" (list (+ x 6092)(- y 450)) 1 1 0)
 (setq l (getreal "\nChieu dai thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 6092)(- y 450)) 250 0 (fix l))
 (command "INSERT" "vitrichuthep" (list (+ x 7935)(- y 450)) 1 1 0)
 (setq n (getreal "\nSo luong thanh: "))
 (command "erase" "last" "") 
 (command "TEXT" "c" (list (+ x 7935)(- y 450)) 250 0 (fix n))
 (setq c (* n l))
 (setq m (/ c 1000))
 (command "TEXT" "c" (list (+ x 9912)(- y 450)) 250 0 (rtos m 2 2))
 (setq r (+ d b b ))
 (setq k (* w r))
 (setq v (* k 786))
 (setq j (* v m))
 (setq t (/ j 100000))
 (command "TEXT" "c" (list (+ x 12214)(- y 450)) 250 0 (rtos t 2 2))
 (traos))
)
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")

   (Princ)
)

;-------
;;------------------------------------------------------------
(defun DUY_newerror (msg)
 (if (and (/= msg "Function cancelled")
   (/= msg "quit / exit abort")
     )
   (princ (strcat "\n" msg))
 )
 (done)
)
;;----------
(defun init ()
 (setq
   DUY_CMD	   (getvar "CMDECHO")
   DUY_OLDERROR *error*
   *error*	   DUY_newerror

 )
 (setvar "CMDECHO" 0)
 (command ".undo" "BE")
)
;;----------
(defun done ()
 (command ".redraw")
 (command ".undo" "E")
 (if DUY_CMD
   (setvar "CMDECHO" DUY_CMD)
 )
 (if DUY_OLDERROR
   (setq *error* DUY_OLDERROR)
 )
 (princ)
)
;;----------
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)


;;----------
(defun c:h? (/ tl index)
 (setq index 0)
 (foreach tl h_taptenlenh
   (setq index (1+ index))
   (princ (strcat "\n" (itoa index) ": " tl)
   )
 )
 (princ)
)

;;----------
(setvar "MODEMACRO" "*_*CHUC BAN LAM VIEC HIEU QUA*_* ")
(setvar "UCSICON" 1)
(setvar "FILLETRAD" 0.0)
(setvar "GRIDMODE" 0)
(setvar "OSMODE" 191)
(setq h_tylebv 100.0)
(dangky_app)
(princ)
;-------
;---------------------------------------
(defun nstr (stri def)
(princ stri)
(princ "<")
(princ " ")
(princ def)
(princ ">")
(princ ":")
(princ " ")
);defun nstr
;--------------------
(defun nstr1 (stri)
(princ stri)
(princ "<")
(princ "Nhap vao")
(princ ">")
(princ ":")
(princ " ")
);defun nstr1
;---------------------
(defun nint (prompt def / temp)
(if def
 (setq temp (getint (nstr prompt def)))
 (setq def (getint (nstr1 prompt)))
);if def
(if temp
 (setq def temp)
 def
);if temp
);defun nint
;---------------------
(defun dnint (prompt def / temp)
(if def
 (setq temp (getreal (nstr prompt def)))
 (setq def (getreal (nstr1 prompt)))
);if def
(if temp
 (setq def temp)
 def
);if temp
);defun nint
;--------------------
(defun ndist (po prompt def / temp) ;nhan kh/cach va luu gia tri mac dinh
(if def
 (setq temp (getdist po (nstr prompt def)))
 (setq def (getdist po (nstr1 prompt)))
)if def
(if temp
   (setq def temp)
   def
);if temp
);defun ndist
;-----------------------------------

  • Vote tăng 2

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

Chào các Bác

các bác hướng dẫn giùm cái này nhé.

minh muốn in tọa độ của điểm nào đó lên màn hình (xem tọa độ của điểm đó trên bản vẽ rồi ghi lại tọa độ đó bên cạnh điểm đó luôn) nhưng trong bản vẽ có rất nhiều điểm cần phải ghi lại như thế, mong các bác hướng dẫn giùm cách viết lisp theo kiểu vòng lặp, chi cần nhập lệnh một lần đề nhập chọn từng điểu để in số liệu về tọa độ.

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
Chào các Bác

các bác hướng dẫn giùm cái này nhé.

minh muốn in tọa độ của điểm nào đó lên màn hình (xem tọa độ của điểm đó trên bản vẽ rồi ghi lại tọa độ đó bên cạnh điểm đó luôn) nhưng trong bản vẽ có rất nhiều điểm cần phải ghi lại như thế, mong các bác hướng dẫn giùm cách viết lisp theo kiểu vòng lặp, chi cần nhập lệnh một lần đề nhập chọn từng điểu để in số liệu về tọa độ.

 

Đoạn mã dưới đây thực hiện điều bạn muốn:

 

(defun c:ntd( / caochu gt vt tmp)

(setq caochu (getdist "\nChieu cao cua text: "))

(while (and

(/= (setq gt (vl-string-trim "," (setq tmp (getstring "\nVao toa do cua diem, enter de ket thuc: ")))) "")

(setq vt (vl-string-position (ascii ",") gt))

)

(entmake (list

(cons 0 "TEXT")

(cons 10 (list (atof (substr gt 1 vt)) (atof (substr gt (+ vt 2))) 0.0))

(cons 1 gt)

(cons 40 caochu)

)

)

)

(if (/= tmp "") (princ "\nBan da nhap sai quy cach!"))

(princ)

)

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

 

 

 

đoạn mã trên giúp mình không phải nhập lệnh liên tục, do minh mới tìm hiểu ve lisp nên minh không phát triển lên để hoàn thành mong muốn của mình nêu ra được, cho nên minh nêu rõ bài toán của mình mong các bác giúp mình nhé.

mình muốn tọa độ của điểm đó mình nhấp chuốt lên màn hình chứ không phải nhập vào. mình xin được trình bày rõ hơn về bài toán của mình như sau.

Trên màn hình có các điểm (giao của các đường thẳng chẳng hạn) mình muốn có một đoạn lisp nào đó có thể nhấp chuột vào điểm đó (điểm có tọa độ là A (XA, YA))

(SETQ A (GETPOINT "\nĐiểm cần ghi tọa độ:")); ...........

kết quả ghi lên màn hình là

X=" hoành độ điểm A"

Y="Tung độ điểm A"

tọa độ in ra màn hình mình có thể ấn định số thập phân.

 

cảm ơn các bác nhiều.

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

đoạn mã trên giúp mình không phải nhập lệnh liên tục, do minh mới tìm hiểu ve lisp nên minh không phát triển lên để hoàn thành mong muốn của mình nêu ra được, cho nên minh nêu rõ bài toán của mình mong các bác giúp mình nhé.

mình muốn tọa độ của điểm đó mình nhấp chuốt lên màn hình chứ không phải nhập vào. mình xin được trình bày rõ hơn về bài toán của mình như sau.

Trên màn hình có các điểm (giao của các đường thẳng chẳng hạn) mình muốn có một đoạn lisp nào đó có thể nhấp chuột vào điểm đó (điểm có tọa độ là A (XA, YA))

(SETQ A (GETPOINT "\nĐiểm cần ghi tọa độ:")); ...........

kết quả ghi lên màn hình là

X=" hoành độ điểm A"

Y="Tung độ điểm A"

tọa độ in ra màn hình mình có thể ấn định số thập phân.

 

cảm ơn các bác nhiều.

(DEFUN EXCUTE(/ n P TX TY)
 (setq str (strcat "\nPhan so le muon lay [" (itoa sl) "] (press Enter or Space for get default): "))
 (setq n (getint str))
 (if (/= n Nil)
(setq sl n)	
 )  
 (While T
(setq P Null)
(princ "\nPick a point or press ESC for exit:")
(setq P (getpoint))
(if (/= P Nil)
  (progn
(setq TX (rtos (Car P) 2 sl))
(setq TY (rtos (Cadr P) 2 sl))
(command "-INSERT" "TD" P "1" "1" "0" TX TY)
  )	  
)  
 );End While  
)
(DEFUN INIT()
 (if (= sl Nil)
(setq sl 2)
 )  
)
(DEFUN C:TOADO()
 (INIT)
 (EXCUTE)
)

Tải thêm cái này về:

http://www.cadviet.com/upfiles/TD.zip

  • Vote tăng 1

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ải thêm cái này về:

http://www.cadviet.com/upfiles/TD.zip

Bác Nguyen Hoanh ơi ! sao mình không tải được, vã lại có cách nào khác không (chỉ sử dụng lisp không thôi, mà không phai dùng file TD.dwg nữa không.

 

nhân tiện nhờ bác chỉ giùm mình sửa đoạn lisp này với nha'

 

đoạn lisp này sau khi chạy thì nó bỏ toàn bộ lựa chon truy bát tự đông (Snap), bác có cách nào giúp mình lấy lại tựa chọn cũ hay không, vã lại bài toán trên có thể ghi tọa độ theo kiện ghi cao độ trong đoạn này được không?

 

;VE CAO TRINH
(DEFUN C:CT (/ CMD PT1 PT2 PT3 PT4 PT5 PT6 PT7 PT8 NPI TX DX DY TL OSM OLL
	CRST RSIZE TSIZE STR PRMT FCH NBC OLDERR)
(SETQ OLDERR *error*
  *error* loisb)
(command "layer" "m" "ghichu" "c" "150" """")
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ NBC (GETVAR "CLAYER"))
(SETQ OSM (GETVAR "OSMODE"))
(SETVAR "CMDECHO" 0)
(SETQ PT1 (GETPOINT "\nDiem cao trinh:"))
(SETQ TX "%%p00.00");;(GETSTRING "\nCao trinh:"))
(SETQ FCH (SUBSTR TX 1 1))
(IF (= FCH "@") (SETQ TX (STRCAT "%%P" (SUBSTR TX 2 (- (STRLEN TX) 1)))))
(SETQ CRST (GETVAR "TEXTSTYLE"))
(SETQ RSIZE (CDR (ASSOC 40 (TBLSEARCH "STYLE" CRST))))
(SETQ TSIZE (GETVAR "TEXTSIZE"))
(SETQ STR (RTOS TSIZE 2))
(SETQ PRMT (STRCAT "\nTy Le Ban Ve <" STR ">:"))
;(SETQ PRMT (STRCAT "\nText height <" STR ">:"))
(IF (= RSIZE 0)
 (PROGN
(INITGET 4)
(SETQ TSIZE (GETREAL PRMT))
(IF (= TSIZE NIL) (SETQ TSIZE (GETVAR "TEXTSIZE"))
		  (SETVAR "TEXTSIZE" TSIZE))
		  (SETQ TSIZE (* 2.5 TSIZE))
 )
)
(PRINC)
(SETQ TL (* 2.5 (/ (GETVAR "TEXTSIZE") 2)))
(SETVAR "OSMODE" 0)
(SETQ DX (CAAR (CDR (TEXTBOX (LIST (CONS 1 TX))))))
(SETQ NPI (/ PI 2))
(SETQ PT4 (POLAR PT1 NPI (* 1 TL)))
(SETQ PT2 (POLAR PT4 PI (* 2 TL)))
(SETQ PT3 (POLAR PT4 0 (* 9 TL)))
(SETQ PT5 (POLAR PT4 NPI (* 3 TL)))
(SETQ PT6 (POLAR PT2 NPI  TL))
(SETQ PT7 (POLAR PT6 0 (+ (* 3.7 TL) DX)))
(SETQ PT8 (POLAR PT4 NPI (* 0.5 TL)))
(SETQ PT8 (POLAR PT8 0 (* 0.5 TL)))
(SETQ PT9 (POLAR PT1 pi (* 2 TL)))
(SETQ PT10 (POLAR PT1 0 (* 2 TL)))
(COMMAND "COLOR" "84" "")
(COMMAND "STYLE" "CAODO"  "Vni-times" "" "" "" "" "")
;(COMMAND "STYLE" "honghung"  "vn_vni.shx" "" "" "" "" "")

(IF (= RSIZE 0)(COMMAND "TEXT" PT8 TSIZE 0 tX) (COMMAND "TEXT" PT8 0 TX))
(COMMAND "COLOR" "7" "")
(COMMAND "pLINE" PT3 "Width" "0.005" "" PT2 PT1 "Width" "0.05" "" PT9 PT10 PT1 "Width" "0.005" "" PT5  "")
(COMMAND "COLOR" "254" "")
(COMMAND "SOLID" PT1 PT2 PT4 "" "")
(SETVAR "CLAYER" "0")
(command "ddedit" pause)
)

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
Bác Nguyen Hoanh ơi ! sao mình không tải được, vã lại có cách nào khác không (chỉ sử dụng lisp không thôi, mà không phai dùng file TD.dwg nữa không.
Vẫn download bình thường mà bạn!

 

nhân tiện nhờ bác chỉ giùm mình sửa đoạn lisp này với nha'

đoạn lisp này sau khi chạy thì nó bỏ toàn bộ lựa chon truy bát tự đông (Snap), bác có cách nào giúp mình lấy lại tựa chọn cũ hay không, vã lại bài toán trên có thể ghi tọa độ theo kiện ghi cao độ trong đoạn này được không?

Để không mất truy bắt, bạn thêm 2 dòng mã như sau:

- (setq old_osmode (getvar "OSMODE")) vào đầu tiên của hàm (trước dòng command "layer" ...).

- (setvar "OSMODE" old_osmode) vào cuối cùng của hàm (sau dòng command "ddedit" ...).

 

Trong đoạn mã trên, mã lệnh (SETQ OLDERR *error* *error* loisb) là vô nghĩa vì không có hàm loisb.

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
Có cái lisp nào ntn không: tự động copy nội dung của text 1 khi dc chọn -> tự động paste đè lên text 2?

 

Cái này thì đơn giản lắm. Còn một cách đơn giản hơn nữa là dùng lệnhCopy.

Chẳng hiểu phải tạo ra một lệnh copy nội dung của Text1 rổi thay thế nó cho một Text 2 để làm gì trong khi truyền thống của dân CAD là copy nhưng cái giống nhau, cái nào khác nhau thì sữa lại một chút.

 

Lần sau bác tìm ý tưởng nào hay hay một chút,

hehehheheheh

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
Có cái lisp nào ntn không: tự động copy nội dung của text 1 khi dc chọn -> tự động paste đè lên text 2?

 

Mình có cái này hồi xưa thấy trong CD bán ngoài thị trường chẳng biết của ai viết nhưng đúng ý của bạn nè.

(defun c:ND 
 (/ Ename Elist Msg Oldtext Oldlist Newtext Newlist)
(prompt "\nChon chu muon chinh.")
 (setq Ename (car (entsel)))
(prompt "\nChon chu lam chuan.")
 (if (not Ename) (prompt "\nChua chon duoc doi tuong.")
 (progn
  (setq Elist (entget Ename)) 
  (setq Oldlist (assoc 1 Elist)) 
  (setq Oldtext (cdr Oldlist))
  (setq Msg (strcat "\nNewtext <" Oldtext ">:"))
  (setq Newtext (car (entsel)))
  (setq Newtext (entget Newtext))
  (setq Newtext (assoc 1 Newtext)) 
  (setq Newtext (cdr Newtext))
  (if (= Newtext "") (setq Newtext Oldtext))
  (setq Newlist (cons '1 Newtext))
  (setq Elist (subst Newlist Oldlist Elist))
  (entmod Elist)
 ) ; end progn
 ) ; end if
 (princ)
)

 

Tên lệnh là ND

Chọn chử muốn chỉnh trước rồi chọn chử làm mẫu sau. Chúc vui !!!!!!

  • Vote tăng 4

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
Cái này thì đơn giản lắm. Còn một cách đơn giản hơn nữa là dùng lệnhCopy.

Chẳng hiểu phải tạo ra một lệnh copy nội dung của Text1 rổi thay thế nó cho một Text 2 để làm gì trong khi truyền thống của dân CAD là copy nhưng cái giống nhau, cái nào khác nhau thì sữa lại một chút.

 

Lần sau bác tìm ý tưởng nào hay hay một chút,

hehehheheheh

 

Lần này bác không đúng rồi cái này rất hay dùng:

Ví dụ đã có khung tên các dòng chử đã có sẳn, canh lề, chiều cao bây giờ chỉ cần nội dung có sẵn đâu đó trong bản vẽ.

Bác đồng ý rồi chứ.

  • Vote tăng 3

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
Mình có cái này hồi xưa thấy trong CD bán ngoài thị trường chẳng biết của ai viết nhưng đúng ý của bạn nè.

(defun c:ND 
 (/ Ename Elist Msg Oldtext Oldlist Newtext Newlist)
(prompt "\nChon chu muon chinh.")
 (setq Ename (car (entsel)))
(prompt "\nChon chu lam chuan.")
 (if (not Ename) (prompt "\nChua chon duoc doi tuong.")
 (progn
  (setq Elist (entget Ename)) 
  (setq Oldlist (assoc 1 Elist)) 
  (setq Oldtext (cdr Oldlist))
  (setq Msg (strcat "\nNewtext <" Oldtext ">:"))
  (setq Newtext (car (entsel)))
  (setq Newtext (entget Newtext))
  (setq Newtext (assoc 1 Newtext)) 
  (setq Newtext (cdr Newtext))
  (if (= Newtext "") (setq Newtext Oldtext))
  (setq Newlist (cons '1 Newtext))
  (setq Elist (subst Newlist Oldlist Elist))
  (entmod Elist)
 ) ; end progn
 ) ; end if
 (princ)
)

 

Tên lệnh là ND

Chọn chử muốn chỉnh trước rồi chọn chử làm mẫu sau. Chúc vui !!!!!!

 

 

Mình rất tâm đắc cái này. Nó rất tiện khi làm Kết cấu. Thanks nhé. Nhưng mà làm thế nào để có thể multi dc thì tuyệt?

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
Mình rất tâm đắc cái này. Nó rất tiện khi làm Kết cấu. Thanks nhé. Nhưng mà làm thế nào để có thể multi dc thì tuyệt?

Multi đây:

 

(defun c:ND (/ Ename Elist Msg Oldtext Oldlist Newtext Newlist)
 (defun ss2ent	(ss / sodt index lstent)
   (setq
     sodt  (cond
      (ss (sslength ss))
      (t 0)
    )
     index 0
   )
   (repeat sodt
     (setq ent	   (ssname ss index)
    index  (1+ index)
    lstent (cons ent lstent)
     )
   )
   (reverse lstent)
 )

 (prompt "\nChon chu muon chinh.")
 (setq ssEname (ssget '((0 . "TEXT"))))
 (if (not ssEname)
   (prompt "\nChua chon duoc doi tuong.")
   (progn
     (prompt "\nChon chu lam chuan.")
     (setq lstEname (ss2ent ssEname))
     (setq Newtext (car (entsel)))
     (setq Newtext (entget Newtext))
     (setq Newtext (assoc 1 Newtext))
     (setq Newtext (cdr Newtext))
     (setq Newlist (cons '1 Newtext))

     (foreach Ename lstEname
(setq Elist (entget Ename))
(setq Oldlist (assoc 1 Elist))
(setq Oldtext (cdr Oldlist))
(setq Elist (subst Newlist Oldlist Elist))
(entmod Elist)
     )
   )					; end progn
 )					; end if
 (princ)
)

  • Vote tăng 3

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

Các bác ơi sữa giùm mình đoạn lisp sau này nhé.

 

(defun C:cg()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq tong 0)
 (SETQ TH (SSGET))
(SETQ QUANT (SSLENGTH TH))
(SETQ INDEX 0)
(WHILE (< INDEX QUANT)
 (IF 
  (AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TH INDEX)))))))      
    (PROGN
	 (setq s (entget (SSNAME TH INDEX)))
	   (setq otext (assoc 1 s))
	   (setq ot (cdr otext))
	   (setq ot (read (substr ot 1 )))
	   (setq tong (+ ot tong))
      )
 	)
 (setq index (+ index 1))
)
(prompt "\n Chon gia tri can thay the")
(SETQ TT (SSGET))
(SETQ QUAN (SSLENGTH TT))
(SETQ INDE 0)
(WHILE (< INDE QUAN)
 (IF 
  (AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TT INDE)))))))      
    (PROGN
	 (setq s (entget (SSNAME TT INDE)))
	   (setq otext (assoc 1 s))
	   (setq ot (cdr otext))
	   (setq ot (read (substr ot 1 )))
                  (setq nt (cons 1 (rtos Tong 2)))  
	   (setq s (subst nt otext s))
	   (entmod s)
    )
 	)
 (setq inde (+ inde 1))
)
 )

 

 

với đoạn lisp này khi cộng các giá trị mà có tổng của chúng nhỏ hơn 1 thì nó không xuất ra kết quả 0.3 (giả sử kết quả là 0.3), mà kết quả xuất ra là ".3" ; nếu để thế rồi tiền hành phép toán khác thí nó lại không nhận gía trị .3 mà phải sửa lai 0.3 rồi mới thực hiện được.

 

các bác có thể giúp mình khác phục tình trạng trên không, làm sao để có đươc kết quả là "0.3"

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
Các bác ơi sữa giùm mình đoạn lisp sau này nhé.

 

(defun C:cg()
 (setvar "CMDECHO" 0)
 (setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" pre)
 (setq tong 0)
 (SETQ TH (SSGET))
(SETQ QUANT (SSLENGTH TH))
(SETQ INDEX 0)
(WHILE (  (IF 
  (AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TH INDEX)))))))      
    (PROGN
	 (setq s (entget (SSNAME TH INDEX)))
	   (setq otext (assoc 1 s))
	   (setq ot (cdr otext))
	   (setq ot (read (substr ot 1 )))
	   (setq tong (+ ot tong))
      )
 	)
 (setq index (+ index 1))
)
(prompt "\n Chon gia tri can thay the")
(SETQ TT (SSGET))
(SETQ QUAN (SSLENGTH TT))
(SETQ INDE 0)
(WHILE (  (IF 
  (AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TT INDE)))))))      
    (PROGN
	 (setq s (entget (SSNAME TT INDE)))
	   (setq otext (assoc 1 s))
	   (setq ot (cdr otext))
	   (setq ot (read (substr ot 1 )))
                  (setq nt (cons 1 (rtos Tong 2)))  
	   (setq s (subst nt otext s))
	   (entmod s)
    )
 	)
 (setq inde (+ inde 1))
)
 )

với đoạn lisp này khi cộng các giá trị mà có tổng của chúng nhỏ hơn 1 thì nó không xuất ra kết quả 0.3 (giả sử kết quả là 0.3), mà kết quả xuất ra là ".3" ; nếu để thế rồi tiền hành phép toán khác thí nó lại không nhận gía trị .3 mà phải sửa lai 0.3 rồi mới thực hiện được.

 

các bác có thể giúp mình khác phục tình trạng trên không, làm sao để có đươc kết quả là "0.3"

 

Đoạn lisp trên của bạn chẳng có vấn đề gì cả.

Vấn đề nằm ở biến hệ thống DIMZIN của AutoCAD. Bạn gõ DIMZIN tại dòng lệnh, rồi đặt về giá trị 0 là được (Hiện nay chắc chắn nó đang là 4).

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

Chào mọi người!

Nhờ các bác xem giúp sao đoạn lisp này của em khi nó hông chịu kết thúc cứ phải bấm Éc thi nó mới thoát. còn không thì nó cứ sửa Text sau cùng sau mổi lần bấm enter mà không chọn điểm.

(Defun C:ct ( )


(prompt "\nChon Text mau.")
 (setq DTD (car (entsel)))
 (setq DT (entget DTD))
 (setq NDT (cdr (assoc 1 DT)))

 (Prompt "\nChon cac doi tuong chep theo...")
 (Setq CDT (Ssget))

 (setq a (getpoint "\nChon diem lam chuan: "))
 (setq xa (car a))
 (setq ya (cadr a))

 (while
 (luuos)
 (setvar "osmode" 0)

 (setq b (getpoint "\nChon diem dat moi: "))
 (setq xb (car B ))
 (setq yb (cadr B ))
 (command "copy" CDT "" (list xa ya) (list xb yb ))
 (command "copy" DTD "" (list xa ya) (list xb yb ))
 (setq DTDM (entlast))

  (if (and (>= (ascii NDT) 48) (<= (ascii NDT) 57))
      (setq NDT (itoa (+ (atoi NDT) 1)))
      (setq NDT (chr (+ (ascii NDT) 1)))
  )

  (setq Elist (entget DTDM)) 
  (setq Oldlist (assoc 1 Elist)) 
  (setq Oldtext (cdr Oldlist))
  (setq Oldtext (strcase Oldtext nil))
  (setq Newlist (cons '1 NDT))
  (setq Elist (subst Newlist Oldlist Elist))
  (entmod Elist)

 (traos)
)

   (Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun luuos ()
 (setq
   DUY_OSMODE   (getvar "OSMODE")
   DUY_AUTOSNAP (getvar "AUTOSNAP")
  DUY_LAYERHH (getvar "CLAYER")
  DUY_THANGXEOHH (getvar "ORTHO")
  DUY_filletrad (getvar "FILLETRAD")
 DUY_TEXTSTYLE (getvar "TEXTSTYLE")
  )
)
(defun traos ()
 (if DUY_OSMODE
   (setvar "OSMODE" DUY_OSMODE)
 )
 (if DUY_LAYERHH
   (setvar "CLAYER" DUY_LAYERHH)
 )
 (if DUY_THANGXEOHH
   (setvar "ORTHO" DUY_THANGXEOHH)
 )
 (if DUY_AUTOSNAP
   (setvar "AUTOSNAP" DUY_AUTOSNAP)
 )
(if DUY_filletrad
   (setvar "FILLETRAD" DUY_filletrad)
 )
(if DUY_TEXTSTYLE
   (setvar "TEXTSTYLE" DUY_TEXTSTYLE)
 )


)



  • Vote tăng 5

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

Các bác có ý tưởng nào hay mà không thể giải quyết thì đưa lên để mọi người cùng trao đổi hay học hỏi, cùng tìm hướng giải quyết chứ cứ viết rồi nhờ người khác kiểm tra "chính tả" thì không nên đâu. Với lại khi một chương trình chưa hòan chỉnh mà đưa lên và không nói rõ chức năng thì ai biết bạn muốn gì...

 

Mà công nhận trên này có bác NguyenHoanh hay thật, chịu khó trả lời và sữa lỗi chính tả cho anh em thế.

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
Các bác có ý tưởng nào hay mà không thể giải quyết thì đưa lên để mọi người cùng trao đổi hay học hỏi, cùng tìm hướng giải quyết chứ cứ viết rồi nhờ người khác kiểm tra "chính tả" thì không nên đâu. Với lại khi một chương trình chưa hòan chỉnh mà đưa lên và không nói rõ chức năng thì ai biết bạn muốn gì...

 

Mà công nhận trên này có bác NguyenHoanh hay thật, chịu khó trả lời và sữa lỗi chính tả cho anh em thế.

 

Chết thật! Do đang đọc phần lisp copy tăng nội dung text bên kia thấy có bác cần vẽ them cái vòng tròn cho Text nên mới viết con này nhưng lại gửi tại đây nên mới lạc loài như thế.

Công việc như sau:

Chọn một text mẫu.

Chọn các đối tượng bất kỳ muốn chép theo.

Chọn 1 điểm làm gốc.

Chọn các điểm khác.

Tác dụng như sau:

Copy text mẫu và các đối tượng chọn thêm tới các vị trí mới.

Thay đổi nội dung text thêm một giá trị. tất nhiên phần này thì không bằng của bác Nguyen Hoanh nhưng để đánh trục kt thì dùng được.

Vấn đề còn vướng:

Khi chọn các điểm tiếp theo thì làm ổn cả nhưng nếu muốn dừng lại thì phải bấm esc chứ nếu bấm enter thì cái text cuối cùng cứ tự động tăng giá trị miết.

Do ko rành lắm nên mới nhờ sửa, đừng bực mau già. hehehehehe.

  • Vote tăng 1

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

Có 2 điểm không chuẩn trong đoạn lisp trên của duy782006.

 

- Thứ nhất, vòng lặp while của bạn không có điều kiện thoát, vì vậy sẽ lặp vĩnh viễn. Bạn hãy move đoạn code (setq b (getpoint "\nChon diem dat moi: ")) vào ngay sau while.

 

- Thứ hai, bạn select 2 lần, copy 2 lần đối tượng text, như vậy là thừa. Bạn hãy xóa các dòng lệnh thừa đó:

(Prompt "\nChon cac doi tuong chep theo...")

(Setq CDT (Ssget))

(command "copy" CDT "" (list xa ya) (list xb yb))

 

Như vậy, code sẽ trở thành như sau:

(Defun C:ct ( )
(prompt "\nChon Text mau.")
(setq DTD (car (entsel)))
(setq DT (entget DTD))
(setq NDT (cdr (assoc 1 DT)))


(setq a (getpoint "\nChon diem lam chuan: "))
(setq xa (car a))
(setq ya (cadr a))

(while (setq b (getpoint "\nChon diem dat moi: "))
(luuos)
(setvar "osmode" 0)


(setq xb (car :s_dead:)
(setq yb (cadr :ph34r:)

(command "copy" DTD "" (list xa ya) (list xb yb))
(setq DTDM (entlast))

(if (and (>= (ascii NDT) 48) ((setq NDT (itoa (+ (atoi NDT) 1)))
(setq NDT (chr (+ (ascii NDT) 1)))
)

(setq Elist (entget DTDM))
(setq Oldlist (assoc 1 Elist))
(setq Oldtext (cdr Oldlist))
(setq Oldtext (strcase Oldtext nil))
(setq Newlist (cons '1 NDT))
(setq Elist (subst Newlist Oldlist Elist))
(entmod Elist)

(traos)
)

(Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun luuos ()
(setq
DUY_OSMODE (getvar "OSMODE")
DUY_AUTOSNAP (getvar "AUTOSNAP")
DUY_LAYERHH (getvar "CLAYER")
DUY_THANGXEOHH (getvar "ORTHO")
DUY_filletrad (getvar "FILLETRAD")
DUY_TEXTSTYLE (getvar "TEXTSTYLE")
)
)
(defun traos ()
(if DUY_OSMODE
(setvar "OSMODE" DUY_OSMODE)
)
(if DUY_LAYERHH
(setvar "CLAYER" DUY_LAYERHH)
)
(if DUY_THANGXEOHH
(setvar "ORTHO" DUY_THANGXEOHH)
)
(if DUY_AUTOSNAP
(setvar "AUTOSNAP" DUY_AUTOSNAP)
)
(if DUY_filletrad
(setvar "FILLETRAD" DUY_filletrad)
)
(if DUY_TEXTSTYLE
(setvar "TEXTSTYLE" DUY_TEXTSTYLE)
)
)

 

Có thể mọi người ngạc nhiên tại sao tôi lại ngồi sửa từng lỗi lisp cho các thành viên? Rất dễ hiểu thôi, tôi cũng đã từng tự học lisp như các bạn. Khi đó chưa có mạng internet, không có chương trình visual lisp, không có ai để hỏi. Nhiều khi mắc một lỗi lisp tìm cả tháng mới biết cách khắc phục. Vì vậy, tôi rất hiểu mong muốn của mọi người khi post các bài thực hành lisp lên đây. Tôi đã và sẽ sửa tiếp như thế! He he!!!

  • Vote tăng 3

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
Có 2 điểm không chuẩn trong đoạn lisp trên của duy782006.

 

- Thứ nhất, vòng lặp while của bạn không có điều kiện thoát, vì vậy sẽ lặp vĩnh viễn. Bạn hãy move đoạn code (setq b (getpoint "\nChon diem dat moi: ")) vào ngay sau while.

 

- Thứ hai, bạn select 2 lần, copy 2 lần đối tượng text, như vậy là thừa. Bạn hãy xóa các dòng lệnh thừa đó:

(Prompt "\nChon cac doi tuong chep theo...")

(Setq CDT (Ssget))

(command "copy" CDT "" (list xa ya) (list xb yb))

 

Như vậy, code sẽ trở thành như sau:

(Defun C:ct ( )
(prompt "\nChon Text mau.")
(setq DTD (car (entsel)))
(setq DT (entget DTD))
(setq NDT (cdr (assoc 1 DT)))
(setq a (getpoint "\nChon diem lam chuan: "))
(setq xa (car a))
(setq ya (cadr a))

(while (setq b (getpoint "\nChon diem dat moi: "))
(luuos)
(setvar "osmode" 0)
(setq xb (car :s_dead:)
(setq yb (cadr :ph34r:)

(command "copy" DTD "" (list xa ya) (list xb yb))
(setq DTDM (entlast))

(if (and (>= (ascii NDT) 48) (<= (ascii NDT) 57))
(setq NDT (itoa (+ (atoi NDT) 1)))
(setq NDT (chr (+ (ascii NDT) 1)))
)

(setq Elist (entget DTDM))
(setq Oldlist (assoc 1 Elist))
(setq Oldtext (cdr Oldlist))
(setq Oldtext (strcase Oldtext nil))
(setq Newlist (cons '1 NDT))
(setq Elist (subst Newlist Oldlist Elist))
(entmod Elist)

(traos)
)

(Princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun luuos ()
(setq
DUY_OSMODE (getvar "OSMODE")
DUY_AUTOSNAP (getvar "AUTOSNAP")
DUY_LAYERHH (getvar "CLAYER")
DUY_THANGXEOHH (getvar "ORTHO")
DUY_filletrad (getvar "FILLETRAD")
DUY_TEXTSTYLE (getvar "TEXTSTYLE")
)
)
(defun traos ()
(if DUY_OSMODE
(setvar "OSMODE" DUY_OSMODE)
)
(if DUY_LAYERHH
(setvar "CLAYER" DUY_LAYERHH)
)
(if DUY_THANGXEOHH
(setvar "ORTHO" DUY_THANGXEOHH)
)
(if DUY_AUTOSNAP
(setvar "AUTOSNAP" DUY_AUTOSNAP)
)
(if DUY_filletrad
(setvar "FILLETRAD" DUY_filletrad)
)
(if DUY_TEXTSTYLE
(setvar "TEXTSTYLE" DUY_TEXTSTYLE)
)
)

 

Có thể mọi người ngạc nhiên tại sao tôi lại ngồi sửa từng lỗi lisp cho các thành viên? Rất dễ hiểu thôi, tôi cũng đã từng tự học lisp như các bạn. Khi đó chưa có mạng internet, không có chương trình visual lisp, không có ai để hỏi. Nhiều khi mắc một lỗi lisp tìm cả tháng mới biết cách khắc phục. Vì vậy, tôi rất hiểu mong muốn của mọi người khi post các bài thực hành lisp lên đây. Tôi đã và sẽ sửa tiếp như thế! He he!!!

 

Cám ơn bác nhưng cái (Prompt "\nChon cac doi tuong chep theo...") là để copy các đối tượng khác mà người dùng muốn copy theo (không phải là text vừa rồi) nên không phải là thừa. Ví dụ vẽ hoàn chỉnh phần đánh trục kích thước sau đó thì copy chọn text trước rồi chọn vòng tròn sau thì sẽ được vậy mà. Vậy là sai 1 lổi thôi nghen.

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

Bác N Hoanh có thể viết 1 lisp này dùm mình được ko? Cám ơn trước nhé.

Sau khi load Số liệu nhập từ notepad, qua Cad chọn điểm gốc rồi Vẽ biểu đồ SPT và in ra luôn số liệu nhập.

Độ sâu (SPT) SPT1 SPT2 SPT3, số liệu dùng để vẽ SPT (Đường Line) là N30 = SPT2 + SPT3 và độ sâu.

Tỷ lệ bản vẽ trong Cad là 1/250.

 

Ví dụ như:

Độ sâu (SPT) SPT1 SPT2 SPT3

2.5 2 3 4

5.5 5 6 7

8.5 7 6 8

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×