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

Nhờ Các Anh Chỉnh Sửa Giúp Em Lisp Sau

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

Em có tìm được cái lisp này. Em ko biết lệnh về lisp. Nhờ các anh chỉnh sửa giúp em thêm các nội dung sau:

1. Làm tròn số sau dấu chấm do mình nhập vào và vẫn còn lưu lại ở các lần sau giá trị đó nếu mình không muốn thay đổi (nếu thay đổi thì nhập lại).

2. Tính khoảng cách của 2 điểm pick (điểm số 1 và điểm số 2) theo phương ngang chứ không phải theo đường chéo như hiện tại.

Em cảm ơn các anh.

 

Code:

(defun c:KC (/ p1 p2 txt etxt d)
(setq p1 (getpoint "\n Chon diem thu nhat")
         p2 (getpoint "\n Chon diem thu hai ")
         txt (car (entsel "\n Chon text can thay" ))
         d (distance p1 p2)
         etxt (entget txt)
         etxt (subst (cons 1 (rtos d 2 3)) (assoc 1 etxt) etxt)
)
(entmod etxt)
(command "change" txt "" "p" "c" 1 "")
(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

Gợi ý cho bạn chút thôi.

Muốn tính theo phương X thì thay đoạn:     d (distance p1 p2)     bằng         d (abs  (- (car p1) (car p2)))

Muốn thay đổi số chữ số sau dấu phẩy thì có thể thay:            (rtos d 2 X) với x là số chữ số sau dấu phẩy.

  • 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

Gợi ý cho bạn chút thôi.

Muốn tính theo phương X thì thay đoạn:     d (distance p1 p2)     bằng         d (abs  (- (car p1) (car p2)))

Muốn thay đổi số chữ số sau dấu phẩy thì có thể thay:            (rtos d 2 X) với x là số chữ số sau dấu phẩy.

Cảm ơn anh đã giúp.

Em thay tính khoảng cách thì được rồi nhưng thay đổi sau dấu phẩy thì chưa được như ý.

Ý của em là lựa chọn sau dấu phẩy mấy số thì mình nhập vào và dòng lệnh lưu lại số đó cho các lần thực hiện tiếp theo.

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 thử thêm đoạn này ở đầu hàm lisp:

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))
  (initget 4)
  (setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))
                  ((getvar 'USERI1))))
  (setvar 'USERI1 stp)

Sau đó thay: (rtos d 2 3)) thành (rtos d 2 stp))

  • 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

Bạn thử thêm đoạn này ở đầu hàm lisp:

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))

  (initget 4)

  (setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))

                  ((getvar 'USERI1))))

  (setvar 'USERI1 stp)

Sau đó thay: (rtos d 2 3)) thành (rtos d 2 stp))

Mình làm như bạn hướng dẫn rồi nhưng vẫn chưa được bạn ơi. Nếu bạn pich vào 2 điểm được giá trị khoảng cách là 4 thì khi đó chọn text thay thế hiển thị là 4 chứ không phải 4.00 mặc dù trước đó mình chọn số thập phân là 02 số rồi. Nhở các anh sửa giúp. Em xin cảm ơn

 

Code như sau:

 

(defun c:KC (/ p1 p2 txt etxt d)

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))

  (initget 4)

  (setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))

                  ((getvar 'USERI1))))

  (setvar 'USERI1 stp)

 

(setq p1 (getpoint "\n Chon diem thu nhat")

          p2 (getpoint "\n Chon diem thu hai ")

         txt (car (entsel "\n Chon text can thay" ))

          d (distance p1 p2)

         etxt (entget txt)

         etxt (subst (cons 1 (rtos d 2 stp)) (assoc 1 etxt) etxt)

)

(entmod etxt)

(command "change" txt "" "p" "c" 1 "")

(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

Mình làm như bạn hướng dẫn rồi nhưng vẫn chưa được bạn ơi. Nếu bạn pich vào 2 điểm được giá trị khoảng cách là 4 thì khi đó chọn text thay thế hiển thị là 4 chứ không phải 4.00 mặc dù trước đó mình chọn số thập phân là 02 số rồi. Nhở các anh sửa giúp. Em xin cảm ơn

 

Code như sau:

 

(defun c:KC (/ p1 p2 txt etxt d)

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))

  (initget 4)

  (setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))

                  ((getvar 'USERI1))))

  (setvar 'USERI1 stp)

 

(setq p1 (getpoint "\n Chon diem thu nhat")

          p2 (getpoint "\n Chon diem thu hai ")

         txt (car (entsel "\n Chon text can thay" ))

          d (distance p1 p2)

         etxt (entget txt)

         etxt (subst (cons 1 (rtos d 2 stp)) (assoc 1 etxt) etxt)

)

(entmod etxt)

(command "change" txt "" "p" "c" 1 "")

(princ)

)

 

 

 A @QuocManh  lỗi cũ kìa  :D  :D  :D

Gõ  DIMZIN , set giá trị 0 rồi thử lại xem.

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

Dạ nhờ các anh vào chỉnh sửa giúp em với ạ. Em xin cảm ơn

Ý là bạn gõ trực tiếp lên cad câu lệnh :  DIMZIN ,  set giá trị 0  rồi thử lại xem.  :) Chứ a @QuocManh từng chữa lỗi này rồ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
Vào lúc 27/10/2016 tại 15:31, Danh Cong đã nói:

Ý là bạn gõ trực tiếp lên cad câu lệnh :  DIMZIN ,  set giá trị 0  rồi thử lại xem.  :) Chứ a @QuocManh từng chữa lỗi này rồi.

(defun C:sr( / ss L e #h)

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))
  (initget 4)
  (setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))
                  ((getvar 'USERI1))))
  (setvar 'USERI1 stp)

(vl-load-com)
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
(or ans (setq ans 1))
(setq
   #h 200
   L (strcat "L= "
   (vl-princ-to-string (* (getvar "dimlfac") (apply '+
       (mapcar 'Length1 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 1 (rtos d 2 stp) "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))))))
   ))) " m"
   )
   ans (cond ((getint (strcat "\nPhuong an nhap ket qua < " (itoa ans) " > :")))(ans))
   txtObj (cond     ((= ans 1) (vlax-ename->vla-object (car (entsel "\nChon text ghi ket qua :"))))
                   (T (vla-addtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) L (vlax-3d-point (getpoint "\n Chon diem nhap ket qua" )) #h ))
           )
)
(vla-put-TextString txtObj L)
(vla-put-Height txtObj #h)
(princ)
)

 

 

 

Bác Danh Cong xem giúp lisp này sai chỗ nào hộ e với. Có hiển thị hỏi thập phân là bao nhiêu nhưng bị lỗi lisp luôn bác à.

DIMZIN ,  set giá trị 0  đã để giá trị 0 rùi bác à.

 

Mong bác sửa lỗi giúp e nhé. 

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 xem lại cấu trúc lệnh cond nhé.

Mấy dòng đỏ ở đầu bạn sửa lại 1 chút

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))
  (initget 4)
  (or (setq stp (getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))

        (setq stp (getvar 'USERI1)))
  (setvar 'USERI1 stp)

Sorry. Cái trên cũng đúng rồi.

Hình như copy trên diền đàn dán vào Vlisp nó hay thêm dấu ? ở phía sau hay sao.

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
14 phút trước, ngokiet đã nói:

Bác xem lại cấu trúc lệnh cond nhé.

Mấy dòng đỏ ở đầu bạn sửa lại 1 chút

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))
  (initget 4)
  (or (setq stp (getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))

        (setq stp (getvar 'USERI1)))
  (setvar 'USERI1 stp)

Vẫn bị lỗi bác à. 

Command: SR
So chu so thap phan <2>:  ; error: bad argument type: numberp: nil

 

Bác xem lại giúp e nhé.

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
1 giờ} trướ}c, dinhnhat đã nói:

(defun C:sr( / ss L e #h)

DIMZIN ,  set giá trị 0  đã để giá trị 0 rùi bác à.

Mong bác sửa lỗi giúp e nhé. 

 

1: Việc râu của ông mà lại cắm sang bà đã là 1 sai lầm. Cắm sai vị trí lại càng sai lầm hơn. Dân IT có câu: Nhiệt tình + dốt = phá hoại.

2: Copy code trên diễn đàn, không được download.

 

(defun C:SR (/ ss L e #h)

(or (> (getvar 'USERI1) -1) (setvar 'USERI1 2))
  (initget 4)
  (setq stp (cond ((getint (strcat "\nSo chu so thap phan <" (itoa (getvar 'USERI1)) ">: ")))
                  ((getvar 'USERI1))))
  (setvar 'USERI1 stp)

(vl-load-com)
(defun Length1 (e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
(or ans (setq ans 1))
(setq
   #h 200
   L (strcat "L= "
   (rtos (* (getvar "dimlfac") (apply '+
       (mapcar 'Length1 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))))))
   )) 2 stp) " m"
   )
   ans (cond ((getint (strcat "\nPhuong an nhap ket qua < " (itoa ans) " > :")))(ans))
   txtObj (cond     ((= ans 1) (vlax-ename->vla-object (car (entsel "\nChon text ghi ket qua :"))))
                   (T (vla-addtext (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) L (vlax-3d-point (getpoint "\n Chon diem nhap ket qua" )) #h ))
           )
)
(vla-put-TextString txtObj L)
(vla-put-Height txtObj #h)
(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
38 phút trước, Danh Cong đã nói:

1: Việc râu của ông mà lại cắm sang bà đã là 1 sai lầm. Cắm sai vị trí lại càng sai lầm hơn. Dân IT có câu: Nhiệt tình + dốt = phá hoại.

2: Copy code trên diễn đàn, không được download.

Vẫn bị lỗi này bác Danh Cong.

Chọn được đối tượng pline, line rùi. Nhưng bước tiếp theo lại lỗi....

 

Bác thu xếp xử lý giúp e nhé.

Cám ơn bác nhiều.:)

 

Command: sr
So chu so thap phan <2>:
Select objects: 1 found
Select objects:  ; error: bad argument type: numberp: nil

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
37 phút trước, dinhnhat đã nói:

Command: sr
So chu so thap phan <2>:
Select objects: 1 found
Select objects:  ; error: bad argument type: numberp: nil

nên quay 1 đoạn video màn hình xem các bước làm thế nào. Nói thế này thì tôi chịu. Hoặc dùng máy người khác kiểm tra lisp có lỗi không.

Mà dùng không được lisp này thì dùng lisp khác. Trên diễn đàn không thiế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

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  

×