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

Xin Lisp Tự Động Các Text Có Tọa Độ Nằm Trong Vùng Khép Kín

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

Lisp Congtext

 

(defun c:congtext ()
(prompt "\nChon Text")
(setq sslist (ssget '((-4 . "<or")(0 . "TEXT")(0 . "MTEXT")(-4 . "or>"))))
(setq number (SSLENGTH sslist)
      sum 0)
(repeat number
 
(setq Value (atof (cdr (assoc 1 (entget (ssname sslist 0))))))
(setq sum (+ sum value))
(ssdel (ssname sslist 0) sslist)
)
(setq ptext (getpoint "\nChon diem chen Text: \n"))
(command "-text" ptext "" "" (rtos sum 2 2))
  (princ)
  )

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

Lisp cộng số trong Text

 

;Lisp Congtext

 

(defun c:congtext ()
(prompt "\nChon Text")
(setq sslist (ssget '((-4 . "<or")(0 . "TEXT")(0 . "MTEXT")(-4 . "or>"))))
(setq number (SSLENGTH sslist)
      sum 0)
(repeat number
 
(setq Value (atof (cdr (assoc 1 (entget (ssname sslist 0))))))
(setq sum (+ sum value))
(ssdel (ssname sslist 0) sslist)
)
(setq ptext (getpoint "\nChon diem chen Text: \n"))
(command "-text" ptext "" "" (rtos sum 2 2))
  (princ)
  )

 

  • 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

bạn xem file demo giúp mình với. ý mình là trong 1 vùng khép kín có những con số. mình xin lisp cộng các số đó lại với nhau ấy. 

Bạn đã thử sử dụng lisp mình gửi chưa ! Bạn hiểu thế nào về khái niệm lisp.

Với bạn, thì những con số đó là 1. 2. 3 đơn thuần .... Còn với người lập lisp, đó là những Text với dữ liệu bên trong là số.

Lisp cộng text ở đây: là cộng những con số bên trong Text

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

Bạn đã thử sử dụng lisp mình gửi chưa ! Bạn hiểu thế nào về khái niệm lisp.

Với bạn, thì những con số đó là 1. 2. 3 đơn thuần .... Còn với người lập lisp, đó là những Text với dữ liệu bên trong là số.

Lisp cộng text ở đây: là cộng những con số bên trong Text

dĩ nhiên là mình đã chạy lisp của bạn rồi.

trong file demo của mình có 42 vùng khép kín. mỗi vùng có từ 1-5 con số khác nhau

nếu dùng lisp của bạn thì mình chỉ làm việc với mỗi vùng mà thôi, như vậy cũng hơi bất tiện nếu số lượng vùng lớ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

dĩ nhiên là mình đã chạy lisp của bạn rồi.

trong file demo của mình có 42 vùng khép kín. mỗi vùng có từ 1-5 con số khác nhau

nếu dùng lisp của bạn thì mình chỉ làm việc với mỗi vùng mà thôi, như vậy cũng hơi bất tiện nếu số lượng vùng lớn.

 

Uhm, cái này thì mình chưa viết được. Trình độ viết lisp chưa sâu nên chỉ giúp bạn được vậy thôi.

Đành chờ các cao nhân khác giúp bạn vậ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

mình có file gồm nhiều vùng khép kín, trong mỗi vùng có số lượng text (là số) khác nhau. các bạn giúp mình lisp cộng các số đó lại với.

Thử lisp này nhé. Vòng lặp chọn điểm đặt text từng vùng 1 nhé. 

(defun c:test  (/ *error* os pt old_last new_last sum n value)
  (defun *error*  (msg)
    (and os
         (setvar 'osmode os)
         )
    (if (and msg
             (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,"))
             )
      (princ (strcat "\nError: " msg))
      )
    )
  (setq os (getvar 'osmode))
  (while (setq pt (getpoint "\nChon diem dat text trong vung kin: "))
    (setvar 'osmode 0)
    (setq old_last (entlast))
    (command "-boundary" pt "")
    (setq new_last (entlast))
    (if (equal old_last new_last)
      (princ "\nVung ban chon khong kin.")
      (progn
        (setq ss (ssget "_WP" (mapcar
                                (function
                                  (lambda (x) (cdr x))
                                    )
                                (vl-remove-if-not
                                  (function
                                    (lambda (x) (= (car x) 10))) (entget new_last))
                                )
                        '((0 . "TEXT")))
              );setq
        (setq sum 0.)
        (setq n 0)
        (repeat (sslength ss)
          (setq value (atof (cdr (assoc 1 (entget (ssname ss n))))))
          (setq sum (+ sum value))
          (setq n (1+ n))
          );repeat
        (entdel new_last)
        (entmake
          (list (cons 0 "TEXT")
                (cons 10 pt)
                (cons 40 (getvar 'textsize))
                (cons 1 (rtos sum 2 0)) 
                )
          );entmake
        
        ) ;progn else
      ) ;if
    ) ;while
  (setvar 'osmode os)
  (princ)
  ) ;defun

^_^

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

Thử lisp này nhé. Vòng lặp chọn điểm đặt text từng vùng 1 nhé. 

(defun c:test  (/ *error* os pt old_last new_last sum n value)
  (defun *error*  (msg)
    (and os
         (setvar 'osmode os)
         )
    (if (and msg
             (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,"))
             )
      (princ (strcat "\nError: " msg))
      )
    )
  (setq os (getvar 'osmode))
  (while (setq pt (getpoint "\nChon diem dat text trong vung kin: "))
    (setvar 'osmode 0)
    (setq old_last (entlast))
    (command "-boundary" pt "")
    (setq new_last (entlast))
    (if (equal old_last new_last)
      (princ "\nVung ban chon khong kin.")
      (progn
        (setq ss (ssget "_WP" (mapcar
                                (function
                                  (lambda (x) (cdr x))
                                    )
                                (vl-remove-if-not
                                  (function
                                    (lambda (x) (= (car x) 10))) (entget new_last))
                                )
                        '((0 . "TEXT")))
              );setq
        (setq sum 0.)
        (setq n 0)
        (repeat (sslength ss)
          (setq value (atof (cdr (assoc 1 (entget (ssname ss n))))))
          (setq sum (+ sum value))
          (setq n (1+ n))
          );repeat
        (entdel new_last)
        (entmake
          (list (cons 0 "TEXT")
                (cons 10 pt)
                (cons 40 (getvar 'textsize))
                (cons 1 (rtos sum 2 0)) 
                )
          );entmake
        
        ) ;progn else
      ) ;if
    ) ;while
  (setvar 'osmode os)
  (princ)
  ) ;defun

^_^

Những text có tọa độ nằm trong vùng, nhưng do dính đường biên nên lisp của bạn ko cộng những text này. bạn có thể sửa lại lisp theo tọa độ text lại giúp mình với đc ko? với tự động đặt text cộng được vào vị trí bất kỳ trong vùng nữa thì hoàn hảo.

cám ơn bạn đã quan tâm giúp đỡ!!

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

Những text có tọa độ nằm trong vùng, nhưng do dính đường biên nên lisp của bạn ko cộng những text này. bạn có thể sửa lại lisp theo tọa độ text lại giúp mình với đc ko? với tự động đặt text cộng được vào vị trí bất kỳ trong vùng nữa thì hoàn hảo.

cám ơn bạn đã quan tâm giúp đỡ!!

Thay "_WP" thành "_CP" thì sẽ chọn được hết text. Điểm chèn text chính là điểm chọn bất kỳ ở dòng command line đó.

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

- Nếu đổi thành _CP thì 2 bên đường biên đều được cộng vào.

- Đang xây dựng lisp quét 1 phát là ăn ngay, chứ không phải dí vào từng Vùng Kín một, thế thì mệt lắm! :D 

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

- Nếu đổi thành _CP thì 2 bên đường biên đều được cộng vào.

- Đang xây dựng lisp quét 1 phát là ăn ngay, chứ không phải dí vào từng Vùng Kín một, thế thì mệt lắm! :D

Hô hô, mềnh là mềnh thích dí vào từng "vùng kín" :D Một phát quét hết thì chủ thớt hết việc ngồi chơi ah. ^_^ Chỉ việc lên đây xin cái lisp làm hết việc xong đi chơi. Nhàn vã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

Hô hô, mềnh là mềnh thích dí vào từng "vùng kín" :D Một phát quét hết thì chủ thớt hết việc ngồi chơi ah. ^_^ Chỉ việc lên đây xin cái lisp làm hết việc xong đi chơi. Nhàn vãi!

Thỉnh thoảng dí thôi, liên tục thì đứt "chuột" sớm! :D 

  • 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

Thay "_WP" thành "_CP" thì sẽ chọn được hết text. Điểm chèn text chính là điểm chọn bất kỳ ở dòng command line đó.

đổi _WP thành _CP thì các text có tọa độ nằm ngoài vùng, mà dính đường biên vẫn đc cộng vào bạn àh. Tất cả các anh em lên đây xin lisp thì mục đích chung vẫn là rút ngắn tg hoàn thành công việc thôi. Xong việc này làm tiếp việc khác, chứ chưa chắc đã nhàn đâu. 

@quocmanh04tt: bên excel mình có đoạn code VBA kiểm tra đc tọa độ text có nằm trong vùng khép kín hay ko? ko biết nó có giúp ích đc gì cho việc làm lisp này ko nhỉ?

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

đổi _WP thành _CP thì các text có tọa độ nằm ngoài vùng, mà dính đường biên vẫn đc cộng vào bạn àh. Tất cả các anh em lên đây xin lisp thì mục đích chung vẫn là rút ngắn tg hoàn thành công việc thôi. Xong việc này làm tiếp việc khác, chứ chưa chắc đã nhàn đâu. 

@quocmanh04tt: bên excel mình có đoạn code VBA kiểm tra đc tọa độ text có nằm trong vùng khép kín hay ko? ko biết nó có giúp ích đc gì cho việc làm lisp này ko nhỉ?

Không cần. Nhưng bạn định nghĩa tọa độ Text là thế nào? Text trong Cad có các điểm chèn và canh lề: trái, phải, giữa, trên dưới...

  • 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

đổi _WP thành _CP thì các text có tọa độ nằm ngoài vùng, mà dính đường biên vẫn đc cộng vào bạn àh. Tất cả các anh em lên đây xin lisp thì mục đích chung vẫn là rút ngắn tg hoàn thành công việc thôi. Xong việc này làm tiếp việc khác, chứ chưa chắc đã nhàn đâu. 

@quocmanh04tt: bên excel mình có đoạn code VBA kiểm tra đc tọa độ text có nằm trong vùng khép kín hay ko? ko biết nó có giúp ích đc gì cho việc làm lisp này ko nhỉ?

Vấn đề là Ví dụ text nằm trên line sẽ thuộc vùng chọn trái hay phải , trên hay dướ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

Không cần. Nhưng bạn định nghĩa tọa độ Text là thế nào? Text trong Cad có các điểm chèn và canh lề: trái, phải, giữa, trên dưới...

mình làm việc chủ yếu trên Micro Station, nên ko rành về Cad cho lắm.

thường bên mình lấy vị trí chính giữa text làm tọa độ của text đó

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

http://www.mediafire.com/file/5ch9f5n7790l7dl/ggg.dwg

các bạn chọn đồng thời 3 text AAAAAAA , BBBBBBBBBB, CCCCCCCCCC trên file này, xem vị trí chấm xanh dương và ghi chú các bạn sẽ hiểu đc tọa độ text mà bên mình hay sử dụ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

chuẩn men luôn.......... Cám ơn bạn nhiều!

tiện đây bạn tùy biến cho mình lisp xóa text có tọa độ ở bên trong vùng or bên ngoài vùng (vùng là 1 polyline khép kin) với đc ko?

  • Vote giảm 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

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  

×