Đế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

#1 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 09 December 2008 - 09:39 AM

Các bác à, em muốn có 1 lisp làm tròn số trong CAD, đề bài : Có các text là các số từ trước, bây giờ em muốn làm tròn các text đó ( lấy sau dấu phẩy x ký tự mình nhập vào ) . Bác Pro nào viết cho em đi ?
  • 0
Hoàng Giang

#2 leejang

leejang

    biết lệnh move

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

Đã gửi 09 December 2008 - 12:56 PM

Các bác à, em muốn có 1 lisp làm tròn số trong CAD, đề bài : Có các text là các số từ trước, bây giờ em muốn làm tròn các text đó ( lấy sau dấu phẩy x ký tự mình nhập vào ) . Bác Pro nào viết cho em đi ?

Cái này mình cũng đang quan tâm, bác nào biết Lisp thì viết cho mọi người đi !
  • 0

#3 xunghe

xunghe

    biết zoom

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

Đã gửi 09 December 2008 - 03:26 PM

Cái này mình cũng đang quan tâm, bác nào biết Lisp thì viết cho mọi người đi !



bạn gõ UN vao Precision chọn 0.00 hoặc bao nhiêu tùy bạn
  • 0

#4 damletam

damletam

    biết vẽ rectang

  • Members
  • PipPip
  • 86 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 09 December 2008 - 03:54 PM

Bạn vào Dimension style chỉnh trong Modify rồi chỉnh Primany unit /Precision = 0.0.........(tuỳ)
=0 làm tròn xoe :cheers:
  • 0
BƯỚC CHÂN NHỎ VÀO THẾ GIỚI LỚN

#5 leejang

leejang

    biết lệnh move

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

Đã gửi 09 December 2008 - 04:10 PM

[quote name='damletam' date='Dec 9 2008, 15:54' post='44090']
Bạn vào Dimension style chỉnh trong Modify rồi chỉnh Primany unit /Precision = 0.0.........(tuỳ)
=0 làm tròn xoe :cheers:
[/quote¦

Trời ạ ! Ở đây là các Text có sẵn từ trước rùi cơ mà, làm sao các cách thiết đặt có thể thay đổi được. Các các đó của các bác chỉ áp dụng cho bản vẽ mình làm ra từ đầu thôi, còn các bản vẽ do người khác làm mình phải làm tiếp thì phải Dùng Lisp mới làm tròn được chứ ? Mong có bác Pro nào quan tâm viết giúp !
  • 0

#6 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 09 December 2008 - 04:18 PM

bạn gõ UN vao Precision chọn 0.00 hoặc bao nhiêu tùy bạn


Bạn vào Dimension style chỉnh trong Modify rồi chỉnh Primany unit /Precision = 0.0.........(tuỳ)
=0 làm tròn xoe :cheers:


-Cách của hai bạn không đáp ứng được câu hỏi đâu. Trước khi trả lời người ta thì nên thử trước đã.

@hhhggg
-Dùng lisp thì có mấy cái vướng:
+Dấu phân cách là dấu phẩy hay dấu chấm là tùy thuộc vào thiết lập của bạn nên có khi lisp đúng có khi không (khi đọc giá trị).
+Phân biệt text số và text chữ (vấn đề này bàn vài lẩn rồi nhưng mình vẫn chưa nắm vấn đề).
+Làm tròn thì dư bỏ bớt còn thiếu thì sao. Ví dụ 12 thì ra 12 hay ra 12,00
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#7 daotukl

daotukl

    biết lệnh stretch

  • Members
  • PipPipPip
  • 162 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 09 December 2008 - 04:27 PM

Bạn vào Dimension style chỉnh trong Modify rồi chỉnh Primany unit /Precision = 0.0.........(tuỳ)
=0 làm tròn xoe :cheers:
[/quote¦

Trời ạ ! Ở đây là các Text có sẵn từ trước rùi cơ mà, làm sao các cách thiết đặt có thể thay đổi được. Các các đó của các bác chỉ áp dụng cho bản vẽ mình làm ra từ đầu thôi, còn các bản vẽ do người khác làm mình phải làm tiếp thì phải Dùng Lisp mới làm tròn được chứ ? Mong có bác Pro nào quan tâm viết giúp !

chọn hết các đường kt rồi vào PROPERTIES chỉnh lại
  • 0

#8 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 09 December 2008 - 05:18 PM

chọn hết các đường kt rồi vào PROPERTIES chỉnh lại

Các bác phải phân biệt rõ, đây là text chứ ko phải Dim, như vậy làm sao chỉnh bằng Properties được ? Dấu ngăn cách hàng thập phân và chữ số ta dùng dâuc Chấm. Trong CAD hay Nova đều dùng dấu chấm mà. Và ta thống nhất là làm tròn sau dấu phẩy hai chữ số ! Tốt nhất là làm tròn với số chữ số sau dấu phẩy là do người dùng nhập vào ?
  • 0
Hoàng Giang

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 10 December 2008 - 06:46 AM

Các bác phải phân biệt rõ, đây là text chứ ko phải Dim, như vậy làm sao chỉnh bằng Properties được ? Dấu ngăn cách hàng thập phân và chữ số ta dùng dâuc Chấm. Trong CAD hay Nova đều dùng dấu chấm mà. Và ta thống nhất là làm tròn sau dấu phẩy hai chữ số ! Tốt nhất là làm tròn với số chữ số sau dấu phẩy là do người dùng nhập vào ?

Ứ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. :cheers:
  • 0

#10 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 10 December 2008 - 08:07 AM

Các bác à, em muốn có 1 lisp làm tròn số trong CAD, đề bài : Có các text là các số từ trước, bây giờ em muốn làm tròn các text đó ( lấy sau dấu phẩy x ký tự mình nhập vào ) . Bác Pro nào viết cho em đi ?

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.
  • 0

#11 hhhhgggg

hhhhgggg

    biết dimedit

  • Members
  • PipPipPipPipPip
  • 393 Bài viết
Điểm đánh giá: 30 (tàm tạm)

Đã gửi 10 December 2008 - 11:15 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.

ok ! Cảm ơn bác SSG , lisp của bác chạy tốt lắm ! Diễn đàn của mình thật là tuyệt vời !
  • 1
Hoàng Giang

#12 huycad

huycad

    Chưa sử dụng CAD

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

Đã gửi 25 December 2008 - 02:28 PM

Cho mình hỏi có thể sửa Lisp này thành dạng làm tròn đến 5, 10,...tùy chọn như trong Dim ko nhỉ ?
Thanks a lot

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.


  • 1

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 25 December 2008 - 02:54 PM

Cho mình hỏi có thể sửa Lisp này thành dạng làm tròn đến 5, 10,...tùy chọn như trong Dim ko nhỉ ?
Thanks a lot

Chưa hiểu ý bạn? Có thể nói rõ hơn không?
Lisp trên nhập vào số chữ số thập phân cần làm tròn mà.
  • 0

#14 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 25 December 2008 - 03:15 PM

Chưa hiểu ý bạn? Có thể nói rõ hơn không?
Lisp trên nhập vào số chữ số thập phân cần làm tròn mà.

Theo mình hiểu thì ý bạn í thế này:
-Có số _______________________________________0.132456789
-Làm tròn với 5 chử số nó ra _____________________0.12345
-Làm tròn cái kết quả vừa rồi với 10 chử số nó ra ____0.1234567890

Đúng không bạn huycad?
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#15 huycad

huycad

    Chưa sử dụng CAD

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

Đã gửi 25 December 2008 - 03:34 PM

Ko. Là thế này, VD có số 123.2
Làm tròn đến 2 có: 124
Làm tròn đến 5 có: 125
Làm tròn đến 10 có: 120
Cái này tương tự trong Dimstyle, dùng rất hữu ích.

Theo mình hiểu thì ý bạn í thế này:
-Có số _______________________________________0.132456789
-Làm tròn với 5 chử số nó ra _____________________0.12345
-Làm tròn cái kết quả vừa rồi với 10 chử số nó ra ____0.1234567890

Đúng không bạn huycad?


  • 0

#16 duylinh85_xd

duylinh85_xd

    biết zoom

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

Đã gửi 27 February 2009 - 10:10 AM

Tôi xin cảm ơn bạn ssq rất nhiều! Nhờ có lisp của bản mà tôi đã giải quyết công việc của mình rất dễ dàng và đơn giản! Chân thành cảm ơn bạn!
  • 0

#17 phuquang113

phuquang113

    biết vẽ line

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

Đã gửi 25 May 2009 - 11:47 PM

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!
  • 0

#18 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 - 05:39 AM

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:
  • 0

#19 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 - 08:33 AM

Em thử rồi bác ơi! không có tác dụng gì hết. Hu...hu... các bác giúp em chứ em mỏi mệt vì nó lắm rồi!
  • 0

#20 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 - 08:40 AM

Em thử rồi bác ơi! không có tác dụng gì hết. Hu...hu... các bác giúp em chứ em mỏi mệt vì nó lắm rồi!

Bạn hãy upload file của bạn lên đây và nói rõ cái mà bạn muốn. Chứ viết ra không đúng ý của bạn thì mất thời giờ lắm
  • 0