Đến nội dung


Hình ảnh
- - - - -

chuyển 1 số có phần rời nhau thanh 1 số


  • Please log in to reply
7 replies to this topic

#1 2ti

2ti

    biết pan

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

Đã gửi 03 October 2009 - 06:09 AM

Chào các bác!
Mình có 1 lisp như sau:
(defun c:2t1()
(setq ob (ssget))
(setq i 0)
(setq text "")
(while (< i (sslength ob))
(setq dataob (cdr (assoc 1 (entget (ssname ob i)))))
(setq text (strcat text dataob))
(if (> i 0)
(command "Erase" (ssname ob i) "")
)
(setq i (1+ i))
)
(setq obname (ssname ob 0))
(setq dataob (entget (ssname ob 0)))
(setq dataob (subst (cons 1 text) (assoc 1 dataob) dataob))

(entmod dataob)
(entupd obname)

)

-Muc đích trên bản vẽ có các số mà phần số nguyên và phần thập phân tách rời nhau
chọn từng phần ta sẽ được 1 số nguyên (có file bản vẽ)
http://www.cadviet.c...les/2/soroi.dwg
ví dụ 2.15 trên bản vẽ nếu kích vào ta sẽ thấy 2. riêng và 15 riêng dùng chương trình chọn vào 2 phần trên ta được 1 số 2.15 liền nhau
nhưng mỗi lần chỉ làm được 1 số nếu ta bao hết thì số nhảy lung tung .
-Mình muốn 1 lần bao chọn hết các số thì các số sẽ chuyển đổi hết.
Mong các bác sớm hồi âm.cám ơn nhiều
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 October 2009 - 06:59 AM

Chào các bác!
Mình có 1 lisp như sau:
...
-Muc đích trên bản vẽ có các số mà phần số nguyên và phần thập phân tách rời nhau
chọn từng phần ta sẽ được 1 số nguyên (có file bản vẽ)
http://www.cadviet.c...les/2/soroi.dwg
ví dụ 2.15 trên bản vẽ nếu kích vào ta sẽ thấy 2. riêng và 15 riêng dùng chương trình chọn vào 2 phần trên ta được 1 số 2.15 liền nhau
nhưng mỗi lần chỉ làm được 1 số nếu ta bao hết thì số nhảy lung tung .
-Mình muốn 1 lần bao chọn hết các số thì các số sẽ chuyển đổi hết.
Mong các bác sớm hồi âm.cám ơn nhiều


Chưa rõ bạn muốn gì.
- Hỏi về lisp, nhờ người khác hướng dẫn bạn viết lisp?
- Yêu cầu viết lisp, nhờ người khác viết lisp giúp bạn?
  • 0

#3 2ti

2ti

    biết pan

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

Đã gửi 03 October 2009 - 07:47 PM

Chưa rõ bạn muốn gì.
- Hỏi về lisp, nhờ người khác hướng dẫn bạn viết lisp?
- Yêu cầu viết lisp, nhờ người khác viết lisp giúp bạn?

Chào bác Hoành.
Mục đích của em là muốn các Bác giúp em sửa lại đoạn lisp trên vì mỗi lần em chỉ làm liên kết được có 1 số thôi.Em muốn mỗi lần chọn là các số trên bản vẽ đều liên kết với nhau . Em giải thich lại thế này nhé. Bác mở bản vẽ em đã gởi và cho chạy đoạn li sp trên,bác chọn phần số nguyên trước rồi sau đó chọn phần thập phân của số đó sau, số đó sẽ dính lại. nhưng bao chọn hết các số trên thì không được.
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 03 October 2009 - 11:46 PM

Chào bác Hoành.
Mục đích của em là muốn các Bác giúp em sửa lại đoạn lisp trên vì mỗi lần em chỉ làm liên kết được có 1 số thôi.Em muốn mỗi lần chọn là các số trên bản vẽ đều liên kết với nhau . Em giải thich lại thế này nhé. Bác mở bản vẽ em đã gởi và cho chạy đoạn li sp trên,bác chọn phần số nguyên trước rồi sau đó chọn phần thập phân của số đó sau, số đó sẽ dính lại. nhưng bao chọn hết các số trên thì không được.

Bạn post lisp lên diễn đàn chắc bạn cũng ít nhiều biết về lisp. Vậy theo bạn, nên lập lisp thế nào để lisp nhận biết được nên dính cặp text nào vào với nhau trong hàng trăm text được chọn (chưa kể là số lượng text nhập vào có thể là số lẻ - không thành cặp)?
  • 0

#5 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 04 October 2009 - 02:11 AM

-Mình muốn 1 lần bao chọn hết các số thì các số sẽ chuyển đổi hết.
Mong các bác sớm hồi âm.cám ơn nhiều

Bác tham khảo đoạn code này nhé.
(defun C:C2T( / SS1 SS2 n1 n2 i LIS1 P p1 lis2 st st1 st2)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(SETQ SS1 (SSGET "x" '((0 . "TEXT") (72 . 2))))
(SETQ SS2 (SSGET "x" '((0 . "TEXT") (72 . 0))))
(setq i 0)
(while (< i (sslength ss1))
(setq n1 (ssname ss1 i))
(setq p (dxf n1 11) P (STRCAT (RTOS (CAR P) 2 3) (RTOS (CADR P) 2 3)))
(setq lis1 (append lis1 (list (list p n1))))
(setq i (1+ i))
)
(setq i 0)
(while (< i (sslength ss2))
(setq n2 (ssname ss2 i))
(setq p (dxf n2 10) P1 (STRCAT (RTOS (CAR P) 2 3) (RTOS (CADR P) 2 3)))
(setq lis2 (assoc p1 lis1))
(if lis2 (progn
(setq n1 (cadr lis2))
(setq st1 (dxf n1 1) st2 (dxf n2 1) st (strcat st1 st2))
(entmod (subst (cons 1 st) (assoc 1 (entget n1)) (entget n1)))
(command "_.erase" n2 "")
))
(setq i (1+ i))
)
)

  • 0

#6 2ti

2ti

    biết pan

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

Đã gửi 04 October 2009 - 05:55 AM

Đúng ý mình rồi! Cám ơn bạn Trungngamy nhiều nhiều nhé.Bạn có thể giúp mình thế này nhé.
-Chỉ bao các số muốn chọn
- Cộng các số đó với 1 số không đổi nào đó (vd: 2.22)
- nếu được trả các số đó về 2 phần ( số không dính nhau).Thanks!

Nhân tiện đây em cũng có vài lời với bác Hoành. Em lên diễn đàn cũng muốn học hỏi, nâng cao chuyên môn ,
chứ chẳng có ý hỏi đố đâu bác ạ. Bác thông cảm cho em, thực ra thì em cũng mới tự học li sp chút chút. Hai là
văn vẽ của em viết không được trôi chảy lắm . ba là em chua biết cách po st bài lên diễn đàn .Vậy chắc bác hiểu lầm em rồi.
Đoạn li sp trên em đã tìm đi tìm lại nhiều lần nhưng không được , nên đành phải po st lên nhờ anh em giup đỡ . Cảm ơn bác đã quan tâm.
  • 0

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 October 2009 - 12:53 PM

Đúng ý mình rồi! Cám ơn bạn Trungngamy nhiều nhiều nhé.Bạn có thể giúp mình thế này nhé.
-Chỉ bao các số muốn chọn
- Cộng các số đó với 1 số không đổi nào đó (vd: 2.22)
- nếu được trả các số đó về 2 phần ( số không dính nhau).Thanks!

Nhân tiện đây em cũng có vài lời với bác Hoành. Em lên diễn đàn cũng muốn học hỏi, nâng cao chuyên môn ,
chứ chẳng có ý hỏi đố đâu bác ạ. Bác thông cảm cho em, thực ra thì em cũng mới tự học li sp chút chút. Hai là
văn vẽ của em viết không được trôi chảy lắm . ba là em chua biết cách po st bài lên diễn đàn .Vậy chắc bác hiểu lầm em rồi.
Đoạn li sp trên em đã tìm đi tìm lại nhiều lần nhưng không được , nên đành phải po st lên nhờ anh em giup đỡ . Cảm ơn bác đã quan tâm.

Ý tưởng của đoạn Lisp mà bạn TrungNGAMY giúp bạn nằm ở đây
Ý tưởng ở bài viết số 5 và Code thể hiện ở bài viết số 13
Còn bạn chỉ muốn bao các số muốn chọn thì bạn hãy sửa 2 dòng này
(SETQ SS1 (SSGET "x" '((0 . "TEXT") (72 . 2))))
(SETQ SS2 (SSGET "x" '((0 . "TEXT") (72 . 0))))
Thành :
(prompt "\n Chon cac so phan nguyen ")
(SETQ SS1 (SSGET '((0 . "TEXT") (72 . 2))))
(prompt "\n Chon cac so phan thap phan ")
(SETQ SS2 (SSGET '((0 . "TEXT") (72 . 0))))
Bạn hãy chạy lại thử xem nhé.

Còn về cách post bài viết thì bạn có thể xem ở đây :
Viết yêu cầu (Request) và trả lời (Response) như thế nào?
Và nếu bạn muốn cảm ơn ai thì hãy nhấn nút Thanks ở dưới mỗi bài viết thay vì post bài viết cảm ơn nhé.
  • 1

#8 cuongtk2

cuongtk2

    biết vẽ ellipse

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

Đã gửi 05 October 2009 - 05:02 PM

Tôi thấy các số nguyên đứng trước đều có dạng "2." hoặc "3.". Tức là số nguyên kèm theo dấu ".".
Số thập phân đứng sau có cùng điểm chèn với số nguyên đứng trước. Chắc là căn lề 1right + 1left.
Với điều này xử rất đơn giản cho toàn bộ bản vẽ của bạn
  • 0