Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
24 replies to this topic

#1 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 09:04 AM

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.


  • -1

#2 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 09:07 AM

http://www.mediafire...bo/congtext.dwglink file demo


  • -1

#3 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 20 October 2016 - 10:03 AM

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)
  )

  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#4 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 20 October 2016 - 10:07 AM

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)
  )

 


  • 1

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#5 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 10:55 AM

Lisp cộng số trong Text

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. 


  • 0

#6 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 20 October 2016 - 11:15 AM

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


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#7 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 12:07 PM

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.


  • 0

#8 Danh Cong

Danh Cong

    biết lệnh linetype

  • Members
  • PipPipPipPip
  • 242 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 20 October 2016 - 12:39 PM

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.


  • 0

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#9 Bee

Bee

    biết lệnh array

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

Đã gửi 20 October 2016 - 04:44 PM

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

^_^


  • 0

#10 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 08:55 PM

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 đỡ!!


  • 0

#11 Bee

Bee

    biết lệnh array

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

Đã gửi 20 October 2016 - 09:18 PM

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 đó.


  • 0

#12 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 665 Bài viết
Điểm đánh giá: 312 (khá)

Đã gửi 20 October 2016 - 09:39 PM

- 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 


  • 0

#13 Bee

Bee

    biết lệnh array

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

Đã gửi 20 October 2016 - 09:45 PM

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


  • 0

#14 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 665 Bài viết
Điểm đánh giá: 312 (khá)

Đã gửi 20 October 2016 - 09:48 PM

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 


  • 1

#15 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 09:55 PM

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ỉ?


  • 0

#16 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 665 Bài viết
Điểm đánh giá: 312 (khá)

Đã gửi 20 October 2016 - 10:07 PM

đổ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...


  • 1

#17 Bee

Bee

    biết lệnh array

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

Đã gửi 20 October 2016 - 10:09 PM

đổ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 ??????????


  • 0

#18 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 10:32 PM

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 đó


  • 0

#19 nguyễn hiếu nhân

nguyễn hiếu nhân

    biết zoom

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

Đã gửi 20 October 2016 - 10:51 PM

http://www.mediafire...790l7dl/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 


  • 0

#20 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 665 Bài viết
Điểm đánh giá: 312 (khá)

Đã gửi 20 October 2016 - 10:52 PM

Thử nhé! Lệnh: QUETMOTPHAT

https://drive.google...iew?usp=sharing


  • 1