Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Mỹ Siro

[Giúp đỡ] Mình cần viết một lisp thay thế số trong text

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

Vào lúc 15/1/2018 tại 13:38, dinhvantrang đã nói:

lệnh Tcount nhé bạn

Bản chất lệnh Tcount là tạo ra dãy số liên tiếp hoặc thay thế dãy số có sẵn , nhưng cái mình muốn là có tăng có giảm và vẫn giữ được ký tự liền trước của nó, chỉ thay đổi phần số . Không còn cách nào khác sao bạ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
Vào lúc 15/1/2018 tại 13:31, Mỹ Siro đã nói:

Nhờ các anh viết dùm em 1 lisp với nội dung như sau:

abc.png

Em xin chân thành cảm ơn !

Mình dang học lisp nên gửi bạn thử luôn (sài cho Dtext và  Cad có cài express)


 

(defun c:tt ( / Coor Text Number NumberLst Genta i lst newN newT)
(vl-load-com)
(setvar "cmdecho" 0)
(setq oldmode (getvar "osmode"))
(setvar "osmode" 0)
(setq lst nil)
(setq lst (acet-ss-to-list (ssget (list (cons 0 "TEXT")))))
(setq Genta (getreal "Nhap gia so (giam thi nhap so am):"))
(foreach i lst
    (setq Coor (cdr (assoc 10 (entget i))))
    (setq Text (cdr (assoc 1 (entget i))))
    (setq NumberLst (parseNumber Text))
    (setq Number (car NumberLst))
    (setq newN (+ Genta Number)) ; so moi
        (setq newT (vl-string-subst (rtos newN 2 0) (rtos Number 2 0) Text))
            (command "erase" i "")
            (command "text" Coor 0 newT)
) ; foreach
(setvar "osmode" oldmode)
)
(defun parseNumber ( str ) ; from Lee-Mac.com
    (   (lambda ( l )
            (read
                (strcat "("
                    (vl-list->string
                        (mapcar
                           '(lambda ( a b c )
                                (if (or (< 47 b 58)
                                        (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                        (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                    )
                                    b 32
                                )
                            )
                            (cons nil l) l (append (cdr l) '(()))
                        )
                    )
                    ")"
                )
            )
        )
        (vl-string->list str)
    )
)

 

 

TT.lsp

  • Like 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
Vào lúc 20/1/2018 tại 09:50, doductiep đã nói:

Mình dang học lisp nên gửi bạn thử luôn (sài cho Dtext và  Cad có cài express)



 

(defun c:tt ( / Coor Text Number NumberLst Genta i lst newN newT)
(vl-load-com)
(setvar "cmdecho" 0)
(setq oldmode (getvar "osmode"))
(setvar "osmode" 0)
(setq lst nil)
(setq lst (acet-ss-to-list (ssget (list (cons 0 "TEXT")))))
(setq Genta (getreal "Nhap gia so (giam thi nhap so am):"))
(foreach i lst
    (setq Coor (cdr (assoc 10 (entget i))))
    (setq Text (cdr (assoc 1 (entget i))))
    (setq NumberLst (parseNumber Text))
    (setq Number (car NumberLst))
    (setq newN (+ Genta Number)) ; so moi
        (setq newT (vl-string-subst (rtos newN 2 0) (rtos Number 2 0) Text))
            (command "erase" i "")
            (command "text" Coor 0 newT)
) ; foreach
(setvar "osmode" oldmode)
)
(defun parseNumber ( str ) ; from Lee-Mac.com
    (   (lambda ( l )
            (read
                (strcat "("
                    (vl-list->string
                        (mapcar
                           '(lambda ( a b c )
                                (if (or (< 47 b 58)
                                        (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                        (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                    )
                                    b 32
                                )
                            )
                            (cons nil l) l (append (cdr l) '(()))
                        )
                    )
                    ")"
                )
            )
        )
        (vl-string->list str)
    )
)

 

 

TT.lsp

mình áp dụng cho dtext và cad có cài  express vẫn ko được bạn, mỗi lần áp dụng nó lại mất đi 1 đối tượng :v mình ko hiểu sao nữa :) 

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
Vào lúc 19/1/2018 tại 18:03, dinhvantrang đã nói:

 

Gửi bạn dùng thử lisp này xem thử.

http://www.lee-mac.com/numinc.html

 

Với cái của bạn có thể dùng lệnh Tcount với Replace để giải quyết cũng dc

cảm ơn bạn nhiều, lisp bạn cho mình tham khảo thú vị thật đấy :))

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
1 giờ} trướ}c, Mỹ Siro đã nói:

mình áp dụng cho dtext và cad có cài  express vẫn ko được bạn, mỗi lần áp dụng nó lại mất đi 1 đối tượng :v mình ko hiểu sao nữa :) 

Quyên không nhắc. bạn phải tạo 1 kiểu chữ có sẵn với chiều cao khác 0 là OK. vì bản vẽ cad của bạn thường có sẵn các kiểu chữa nên mình không tạo mới trong lisp 

  • Like 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
4 phút trước, doductiep đã nói:

Quyên không nhắc. bạn phải tạo 1 kiểu chữ có sẵn với chiều cao khác 0 là OK. vì bản vẽ cad của bạn thường có sẵn các kiểu chữa nên mình không tạo mới trong lisp

mình làm được rồi, nhưng mình thắc mắc là tại sao lại không làm cho mtext được vậy bạn ? có cách nào làm luôn cho mtext không ?

 

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
Vừa xong, Mỹ Siro đã nói:

mình làm được rồi, nhưng mình thắc mắc là tại sao lại không làm cho mtext được vậy bạn ? có cách nào làm luôn cho mtext không ?

 

Làm thì được nhưng sau khi chèn text mới nó sẽ bị nhảy vị trí đi 1 chút. Còn cách đơn giản hơn  nếu mtext của bạn chỉ có 1 dòng thì  chuyển mtext sang Dtext bằng lệnh x thông thường rồi dùng lisp là ok.

 

  • Like 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
1 phút trước, doductiep đã nói:

Làm thì được nhưng sau khi chèn text mới nó sẽ bị nhảy vị trí đi 1 chút. Còn cách đơn giản hơn  nếu mtext của bạn chỉ có 1 dòng thì  chuyển mtext sang Dtext bằng lệnh x thông thường rồi dùng lisp là ok.

 

cảm ơn bạn nhiều lắm, chắc phải làm vậy rồi :)

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
Đăng nhập để thực hiện theo  

×