Đến nội dung


Hình ảnh

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


  • Please log in to reply
27 replies to this topic

#21 phuquang113

phuquang113

    biết vẽ line

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

Đã gửi 26 May 2009 - 11:14 AM

Thì bác cứ thử cái lisp của bác đi nó đâu có tác dụng gì đâu mà bảo?
  • 0

#22 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 26 May 2009 - 11:39 AM

Thì bác cứ thử cái lisp của bác đi nó đâu có tác dụng gì đâu mà bảo?

Xin lỗi bạn mình bị lỗi 1 chỗ và đã sửa lại. Bạn thử nhé :

Xin admin và các cao thủ giúp thêm về vấn đề tròn số:
VD: số 0.34% thì kết qủa giữ nguyên = 0.34%
Nếu số 2.00% thì bỏ bớt số phía sau đi = 2%
Tôi phải chỉnh sửa rất nhiều bản vẽ như vậy. Rất mong được các bạn giúp đỡ cho. Cám ơn trước!

Tue_NV vẫn chưa hiểu là trong bản vẽ của bạn vừa có cả số thập phân (0.34) và có cả số %(0.34%) hay không?. Vì bạn chưa nói rõ

Thế này nhé :
Tue_NV sẽ lược bỏ theo ý của bạn : 0.34% -> thì kết qủa giữ nguyên = 0.34
Nếu số 2.00% thì bỏ bớt số phía sau đi = 2

Còn đuôi % thì bạn sử dụng Lisp thêm Text thêm vào vậy vì lí do :

Tue_NV vẫn chưa hiểu là trong bản vẽ của bạn vừa có cả số thập phân (0.34) và có cả số % (0.34%) hay không?
Vì bạn chưa nói rõ


Code này có chỉnh lại Lisp của bác ssg 1 chút :
;;;-------------------------------------------------------
(defun etype (e);;;Entity Type
(cdr (assoc 0 (entget e)))
)
;;;-------------------------------------------------------
(defun C:LTT( / ss n i oldDimzin e d v S)
(if (not n0) (setq n0 2))
(setq
ss (ssget '((0 . "TEXT,MTEXT")))
n (getint (strcat "\nSo chu so thap phan <" (itoa n0) ">:"))
i 0
oldDimzin (getvar "dimzin")
)
(if n (setq n0 n) (setq n n0))
(setvar "dimzin" 8)
(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 (rtos v 2 n)
d (subst (cons 1 S) (assoc 1 d) d)
)
(entmod d)
(setq i (1+ i))
)
(setvar "dimzin" oldDimzin)
(princ)
)
:s_big:


  • 1

#23 ht.thichvobien

ht.thichvobien

    biết zoom

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

Đã gửi 25 May 2013 - 09:21 AM

e dùng cad 2010. sao down lisp lệnh ltt về k dùng đc nhỉ?


  • 0

#24 unbroken

unbroken

    biết vẽ arc

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

Đã gửi 07 September 2013 - 09:37 AM

Bạn dùng lisp này thử xem. Lệnh LTT:
 

;;;-------------------------------------------------------(defun etype (e) ;;;Entity Type(cdr (assoc 0 (entget e))));;;-------------------------------------------------------(defun C:LTT( / ss n i oldDimzin e d v S)(if (not n0) (setq n0 2))(setq    ss (ssget '((0 . "TEXT,MTEXT")))    n (getint (strcat "\nSo chu so thap phan <" (itoa n0) ">:"))    i 0    oldDimzin (getvar "dimzin"))(if n (setq n0 n) (setq n n0))(setvar "dimzin" 1)(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 (rtos v 2 n)        d (subst (cons 1 S) (assoc 1 d) d)    )    (entmod d)    (setq i (1+ i)))(setvar "dimzin" oldDimzin)(princ));;;-------------------------------------------------------


@Tue_NV
Ssg đã xem lại vấn đề hôm nọ. Trong các system var liên quan, chỉ có dimzin ảnh hưởng trực tiếp, các "thằng" khác không thấy tác dụng gì khi dùng (rtos value 2 n). Có lẽ do số 2 đã xác định kiểu decimal. Nếu vậy, ta cứ "chơi" như trên đơn giản hơn.

cái của bạn k dùng được bạn ơi


  • 0

Giaminh19@gmail.com


#25 unbroken

unbroken

    biết vẽ arc

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

Đã gửi 07 September 2013 - 09:43 AM

Tue_NV vẫn chưa hiểu là trong bản vẽ của bạn vừa có cả số thập phân (0.34) và có cả số %(0.34) hay không?. Vì bạn chưa nói rõ

Thế này nhé :
Tue_NV sẽ lược bỏ theo ý của bạn : 0.34% -> thì kết qủa giữ nguyên = 0.34
Nếu số 2.00% thì bỏ bớt số phía sau đi = 2

Còn đuôi % thì bạn sử dụng Lisp thêm Text thêm vào vậy vì lí do :

Tue_NV vẫn chưa hiểu là trong bản vẽ của bạn vừa có cả số thập phân (0.34) và có cả số % (0.34%) hay không?
Vì bạn chưa nói rõ


Code này có chỉnh lại Lisp của bác ssg 1 chút :

;;;-------------------------------------------------------
(defun etype (e);;;Entity Type
(cdr (assoc 0 (entget e)))
)
;;;-------------------------------------------------------
(defun C:LTT( / ss n i oldDimzin e d v S)
(if (not n0) (setq n0 2))
(setq
ss (ssget '((0 . "TEXT,MTEXT")))
n (getint (strcat "\nSo chu so thap phan <" (itoa n0) ">:"))
i 0
oldDimzin (getvar "dimzin")
)
(if n (setq n0 n) (setq n n0))
(setvar "dimzin" 8)
(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 (rtos v 2 n)
d (subst (cons 1 S) (assoc 1 d) d)
)
(entmod d)
(setq i (1+ i))
)
(setvar "dimzin" oldDimzin)
(princ)
)
s_big.gif

cái bạn sửa vẫn chưa ổn


  • 0

Giaminh19@gmail.com


#26 chippy

chippy

    Chưa sử dụng CAD

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

Đã gửi 15 January 2014 - 01:35 PM

Ứ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.


  • 0

#27 vit_dong

vit_dong

    Chưa sử dụng CAD

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

Đã gửi 07 November 2014 - 01:31 PM

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.


  • 0

#28 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 07 November 2014 - 02:31 PM

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


  • 1