Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
7 replies to this topic

#1 hotanphi

hotanphi

    biết vẽ polygon

  • Members
  • PipPip
  • 79 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 October 2016 - 08:47 AM

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)
)


  • 0

#2 Danh Cong

Danh Cong

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 252 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 09:10 AM

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.


  • 1

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#3 hotanphi

hotanphi

    biết vẽ polygon

  • Members
  • PipPip
  • 79 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 October 2016 - 09:54 AM

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.


  • 0

#4 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 670 Bài viết
Điểm đánh giá: 313 (khá)

Đã gửi 27 October 2016 - 10:44 AM

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))


  • 1

#5 hotanphi

hotanphi

    biết vẽ polygon

  • Members
  • PipPip
  • 79 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 October 2016 - 01:35 PM

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)
)


  • 0

#6 Danh Cong

Danh Cong

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 252 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 01:57 PM

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.


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#7 hotanphi

hotanphi

    biết vẽ polygon

  • Members
  • PipPip
  • 79 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 October 2016 - 03:23 PM

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


  • 0

#8 Danh Cong

Danh Cong

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 252 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 27 October 2016 - 03:31 PM

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.


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***