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

Lisp làm tròn số ( là Text) trong CAD ???????

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

 

Ứng dụng hàm Round của bác SSG đã trả lời trong topic Lisp nhân thêm hệ số K vào Text. Mình đã phát triển nên đoạn Code này để làm tròn các Text sau các chữ số thập phân

;;;-------------------------------------------------------
;;;-------------------------------------------------------
(defun etype (e);;;Entity Type
(cdr (assoc 0 (entget e)))
)
;;;-------------------------------------------------------
(defun rnd(x);;;Round x, return INT
(if (>= x 0) (fix (+ x 0.5)) (fix (- x 0.5)))
) 
;;;-------------------------------------------------------

(defun TP()
(setq thapphan 2);Ban co the thay doi so thap phan o dong nay
)

(defun round3(x / tue S i j S1 S3)

(setq tue (TP))

(setq S (itoa (rnd (* (abs x) (expt 10 tue)))))

(setq
i (strlen S)
j (- i tue)
S1 (substr S 1 j)
S3 (substr S (1+ j) tue)
)
(if (>= x 0) (strcat S1 "." S3) (strcat "-" S1 "." S3))
)
;;;-------------------------------------------------------
(defun C:Round( / ss k i e d v S)

(setq
ss (ssget '((0 . "TEXT,MTEXT")))
i 0

)

(repeat (sslength ss)
(setq e (ssname ss i))
(if (= (etype e) "MTEXT") (progn
(command "explode" e "")
(setq e (entlast))
))
(setq
d (entget e)
v (atof (cdr (assoc 1 d)))
S (round3 v)
d (subst (cons 1 S) (assoc 1 d) d)
)
(entmod d)
(setq i (1+ i))
)
(princ)
)
Bạn có thể thay đổi số thập phân ở dòng này : (setq thapphan 2)

Đoạn Code này chưa được hoàn thiện lắm vì theo yêu cầu của người sử dụng là khi đánh số thập phân vào thì chương trình sẽ hiểu. Nhưng ở đây lại phải thay đổi số thập phân bằng cách vào file Lisp sửa lại dòng (setq thapphan 2) mới ra được kết quả như ý.

 

Mình đã thử thay câu (setq thapphan 2) bằng câu (setq thapphan (getint "\nSo chu so thap phan la :"))

Nhưng kết quả lại không theo như ý. Vì dưới tác dụng của vòng lặp Repeat cái câu nhắc "nSo chu so thap phan la :" được lặp lại cho đến Text cuối cùng. Điều này nó không theo được ý của người sử dụng.

 

Mong bác SSG và tất cả mọi người cùng góp ý để đoạn Code trên được hoàn thiện một cách trọn vẹn.

 

Chân thành cảm ơn tất cả mọi người. sad.gif

anh TuệVN quả thật tài tình! cảm ơn anh vì những chia sẻ de đóng góp cho sự phát triển bền vững của cadviet.

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

Xin các cao thủ giúp đỡ!!

 

Ví dụ: bản vẽ đo kích thước vừa có: 12,5 và 20.0. Đây là tui chọn lấy 1 chữ số sau dấu thập phân.

Vậy trường hợp tui muốn thành 12.5 và 20 ( Nếu chọn 0 chữ số sau dấu thập phân thì 12.5 sẽ mất số 5 phía sau tức là thành 12)  thì làm như thế nào vậy? Đừng edit từng cái nha.

 

Cám ơn các cao thủ rất 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

Xin các cao thủ giúp đỡ!!

 

Ví dụ: bản vẽ đo kích thước vừa có: 12,5 và 20.0. Đây là tui chọn lấy 1 chữ số sau dấu thập phân.

Vậy trường hợp tui muốn thành 12.5 và 20 ( Nếu chọn 0 chữ số sau dấu thập phân thì 12.5 sẽ mất số 5 phía sau tức là thành 12)  thì làm như thế nào vậy? Đừng edit từng cái nha.

 

Cám ơn các cao thủ rất nhiều.

Vào DImstyle Manager > Primary Units > Nhấp chọn trailing và chọn precision 0.0

  • 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

Dear các bạn, mình có lisp copy trên diễn đàn, giờ mình muốn Lisp này như thế này được ko?

(defun c:cc (/ doituong total dtuong1 tdt dt ktext ktratext ktratext1 ktextcu textdt ktextmoi newcolor oldcolor)
 
   (setq doituong (ssget '((0 . "*LINE"))))
 
   (setq total (sslength doituong))
 
   (setq tdt 0)
 
   (repeat total
 
         (setq total (- total 1))
 
         (setq dtuong1 (cdr (car (entget (ssname doituong total)))))
 
         (command "LENGTHEN" dtuong1 "")
 
         (setq dt (getvar "Perimeter"))
 
         (setq tdt (+ tdt dt))
 
   )
 
   (setq ktext (car (entsel "Chon vao text: ")))
 
   (setq ktratext (entget ktext))
 
   (setq ktratext1 (cdr (assoc 0 ktratext)))
 
   (if (= ktratext1 "TEXT")
 
       (progn
 
               (setq ktextcu (assoc 1 ktratext))
 
               (setq textdt (strcat "L= " (rtos (- tdt 0) 2 0) " m"))
 
               (setq ktextmoi (cons 1 textdt))
 
               (setq ktratext (subst ktextmoi ktextcu ktratext))
 
               (entmod ktratext)
 
               (setq color 4)
 
               (setq newcolor (cons 62 color))
 
                  (if (assoc 62 ktratext)
 
                      (progn
 
                           (setq oldcolor (assoc 62 ktratext))
 
                           (setq ktratext (subst newcolor oldcolor ktratext))
 
                           (entmod ktratext)
 
                      )
 
                      (entmod (append ktratext (list (cons 62 color))))
 
                   )
 
        )
 
        (alert "¤i trкi ¬i, chдn nhЗm rеi, ®г kh«ng ph¶i lµ tetx!")
 
   )
 
  (textpage)
 
  (graphscr)
 
)
  1. Lisp đo ra chiều dài text ko xuất ra các số 0 phía sau, ví dụ: L=11,800m thì chỉ xuất ra text là L=11,8m
  2. Lisp này có thêm chế độ chọn liên tục nhiều Line (multi) được không?
  3. Mình có nhiều đoạn Line khác nhau, ví dụ AB, CD, EF..,...theo Lisp này thì xong từng đoạn Line rồi lập lại từ đầu với các đoạn khác, như vậy hơi mất thêm thời gian
  4. cảm ơn các bạn, đây là lisp mình lấy trện diễn đàn

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


×