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

[Nhờ chỉnh sửa] Lisp trừ 1 text có sẵn cho 1 khoảng cách đo trên cad

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

E đang dùng lisp này để trừ 1 text có sẵn cho 1 số được nhập vào bằng tay. Kết quả được ed vào 1 text có trước.

Mong các bác chỉnh sửa thêm chức năng cho lisp ở thao tác: chọn số trừ

- Có thể chọn số trừ là khoảng cách d giữa 2 điểm A-B trên cad bằng cách pick vào lần lượt 2 điểm đó. Lisp sẽ tự động xác định khoảng cách d và chọn d làm số trừ.

Kết hợp cả 2 hình thức lựa chọn số bị trừ là d và nhập số bằng tay sẽ hoàn thiện lisp hơn và làm được nhiều việc hơn.

Mong được các bác giúp đỡ. Thanks

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=4077&pid=192557&st=0entry192557

(defun c:ths (/ Ename Elist Msg Oldtext Oldlist Newtext Newlist)
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))
(setq ddd (entsel "\nChon text bi tru"))
(while
(or
  (null ddd)
  (/= "TEXT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la text! Chon lai")
(setq ddd (entsel "\nChon text bi tru"))
)
 (setq DTDTT (car ddd))
 (setq DTTT (entget DTDTT))
 (setq NDTTT (cdr (assoc 1 DTTT)))
 (setq NDTTT (atof NDTTT))
 (setq DIEMVIETTEXT (cdr (assoc 10 DTTT)))
(setq diemvt1 (polar DIEMVIETTEXT pi donvi))
(setq diemvt2 (polar DIEMVIETTEXT (* 2 pi) donvi))
(setq diemvt3 (polar DIEMVIETTEXT (/ pi 2) donvi))
(setq diemvt4 (polar DIEMVIETTEXT (- 0 (/ pi 2)) donvi))
		(grdraw diemvt1 diemvt2 3)
		(grdraw diemvt3 diemvt4 3)
(if (= droffln nil)
(setq droffln1 2.00)
(setq droffln1 droffln)
)
(setq
droffln (GETREAL (strcat "\nNhap hang so tru: <" (rtos droffln1 2 2) ">"))
)
(if (= droffln nil)
(setq droffln droffln1)
)
(setq ketquaxuat (- NDTTT droffln))
(setq ketquaxuat (rtos ketquaxuat 2 2))
(setq dddsn (entsel "\nChon text xuat ket qua"))
(while
(or
  (null dddsn)
  (/= "TEXT" (cdr (assoc 0 (entget (car dddsn)))))
)
(princ "\nDoi tuong khong phai la text! Chon lai")
(setq dddsn (entsel "\nChon text tru"))
)
   	(setq DTDTTsn (car dddsn))
   	(setq DTMs (entget DTDTTsn))
   	(setq DTMs (subst (cons 1 ketquaxuat) (assoc 1 DTMs) DTMs))
   	(entmod DTMs)
(command "undo" "end")
  (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

hjhj đúng là con đẻ của bác Duy. Lần trước cũng là bác Duy tốt bụng viết nó cho mình. Bác Duy ơi..............help me!

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

E đang dùng lisp này để trừ 1 text có sẵn cho 1 số được nhập vào bằng tay. Kết quả được ed vào 1 text có trước.

Mong các bác chỉnh sửa thêm chức năng cho lisp ở thao tác: chọn số bị trừ

- Có thể chọn số bị trừ là khoảng cách d giữa 2 điểm A-B trên cad bằng cách pick vào lần lượt 2 điểm đó. Lisp sẽ tự động xác định khoảng cách d và chọn d làm số bị trừ.

Kết hợp cả 2 hình thức lựa chọn số bị trừ là d và nhập số bằng tay sẽ hoàn thiện lisp hơn và làm được nhiều việc hơn.

Mong được các bác giúp đỡ. Thanks

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=4077&pid=192557&st=0entry192557

(defun c:ths (/ Ename Elist Msg Oldtext Oldlist Newtext Newlist)
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))
(setq ddd (entsel "\nChon text bi tru"))
(while
(or
  (null ddd)
  (/= "TEXT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la text! Chon lai")
(setq ddd (entsel "\nChon text bi tru"))
)
 (setq DTDTT (car ddd))
 (setq DTTT (entget DTDTT))
 (setq NDTTT (cdr (assoc 1 DTTT)))
 (setq NDTTT (atof NDTTT))
 (setq DIEMVIETTEXT (cdr (assoc 10 DTTT)))
(setq diemvt1 (polar DIEMVIETTEXT pi donvi))
(setq diemvt2 (polar DIEMVIETTEXT (* 2 pi) donvi))
(setq diemvt3 (polar DIEMVIETTEXT (/ pi 2) donvi))
(setq diemvt4 (polar DIEMVIETTEXT (- 0 (/ pi 2)) donvi))
	(grdraw diemvt1 diemvt2 3)
	(grdraw diemvt3 diemvt4 3)
(if (= droffln nil)
(setq droffln1 2.00)
(setq droffln1 droffln)
)
(setq
droffln (GETdist (strcat "\nNhap hang so tru: <" (rtos droffln1 2 2) ">"))
)
(if (= droffln nil)
(setq droffln droffln1)
)
(setq ketquaxuat (- NDTTT droffln))
(setq ketquaxuat (rtos ketquaxuat 2 2))
(setq dddsn (entsel "\nChon text xuat ket qua"))
(while
(or
  (null dddsn)
  (/= "TEXT" (cdr (assoc 0 (entget (car dddsn)))))
)
(princ "\nDoi tuong khong phai la text! Chon lai")
(setq dddsn (entsel "\nChon text tru"))
)
   	(setq DTDTTsn (car dddsn))
   	(setq DTMs (entget DTDTTsn))
   	(setq DTMs (subst (cons 1 ketquaxuat) (assoc 1 DTMs) DTMs))
   	(entmod DTMs)
(command "undo" "end")
  (Princ))

Sửa đoạn bôi màu đỏ trong lisp là dược theo ý ban rồi.

droffln (GETdist (strcat "\nNhap hang so tru: <" (rtos droffln1 2 2) ">"))

  • 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

Sửa đoạn bôi màu đỏ trong lisp là dược theo ý ban rồi.

droffln (GETdist (strcat "\nNhap hang so tru: <" (rtos droffln1 2 2) ">"))

Bạn mới phát hiện ra chức năng mới của hàm GETdist à?

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ạn mới phát hiện ra chức năng mới của hàm GETdist à?

Hàm (GETDIST ....)

Chức năng: chờ người nhập vao một số:

- Một số thực là một khoảng cách

- Tọa độ của 2 điiểm (Autolisp trả về khoảng cách giữa 2 điểm)

Mình biết về hàm này thế thôi!

  • 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

Sửa đoạn bôi màu đỏ trong lisp là dược theo ý ban rồi.

droffln (GETdist (strcat "\nNhap hang so tru: <" (rtos droffln1 2 2) ">"))

Hề hề hề,

Không ổn rồi,

Như vậy sẽ mất chức năng chọn text có sẵn của bác Duy.

Theo thiển ý của mình thì cần bổ sung thêm đoạn lisp điều kiện để người dùng lựa chọn một trong hai phương án nhập liệu. Nếu chọn text thì chạy code của bác Duy còn nếu chọn nhập số hay khoảng cách thì sử dụng gợi ý của bạn VoHoan mới ổn.

Bạn Bach1212 là người đã sử dụng lisp khá nhiều rồi và theo mình bạn có thể tự làm điều này xem sao. Hãy làm đi rồi vui7o71ng chỗ nào hỏi chỗ đó sẽ tốt hơn cho bạn nhiều.

Chúc thành công.

  • 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

Hàm (GETDIST ....)

Chức năng: chờ người nhập vao một số:

- Một số thực là một khoảng cách

- Tọa độ của 2 điiểm (Autolisp trả về khoảng cách giữa 2 điểm)

Mình biết về hàm này thế thôi!

Bổ sung:

Bên cạnh đó, còn có chức năng khi dùng kết hợp với hàm initget

(initget "a")

(setq var (getdist "\nNhap khoang cách :"))

-> Khi bạn đo khoảng cách thì biến var nhận giá trị là khoảng cách 2 điểm.

-> Khi bạn nhập số thì biến var nhận giá trị số đó

-> Khi bạn nhập "a" -> Return -> "a"

=> Thì biến var sẽ nhận giá trị "a" -> Có thể dùng để lựa chọn rẽ nhánh thực hiện 1 hàm khác

  • 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

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  

×