Chuyển đến nội dung
Diễn đàn CADViet
mrnhat2311

Làm sao để kiểm tra các số posnumber bị thiếu trong view.

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

Hi anh chị em,
Mình có vấn đề sau xin nhờ ace giúp đỡ : Mình có bản vẽ chứa các view để show số posnumber ( những số nằm trong circle như hình đính kèm, không bao gồm text ), posnumber là những số nguyên liên tục. Nhưng quá trình làm view thì sẽ bị thiếu một số posnumber nào đó, mình muốn tìm ra những số posnumber bị thiếu này. Ví dụ số posnumber của mình chạy liên tục từ 2000 đến 2150, nhưng trong bản vẽ có thể sẽ bị thiếu một vài số nào đó, nên mình muốn show ra những số bị thiếu này để kiểm tra. Vậy xin nhờ ace giúp đỡ, mình cảm ơn trước !
 

image.png

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, limfx đã nói:

Bạn gửi bản vẽ show chỗ bị thiếu lên xem thử?

Ví dụ như hình ảnh mình gửi số pos chạy từ 2000 đến 2135 nhưng bị thiếu những số như 2000, 2001,2120, 2128 ... mà mình show ra bị thiếu chưa có những số đó trên bản vẽ, thì mình muốn tìm ra những số bị thiếu đó để bổ sung.

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
41 phút trước, mrnhat2311 đã nói:

Ví dụ như hình ảnh mình gửi số pos chạy từ 2000 đến 2135 nhưng bị thiếu những số như 2000, 2001,2120, 2128 ... mà mình show ra bị thiếu chưa có những số đó trên bản vẽ, thì mình muốn tìm ra những số bị thiếu đó để bổ sung.

Đề tài quá dễ hiểu không cần giải thích nhiều, chỉ thiếu file để test là cái bác limfx cần, không lẽ bắt bác í tự vẽ rồi tự code rồi tự test?!

  • 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ài này rối quá làm xuôi thì được chứ ngược mình chưa tìm ra cách. 

Để đơn giản hơn bạn nên thay Mtext bằng Block att  để dễ thống kê.

Khi tạo Viewport thì thống kê luôn trên Viewport đó.

Ý bạn sao?

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/8/2024 tại 07:36, mrnhat2311 đã nói:

Hi anh chị em,
Mình có vấn đề sau xin nhờ ace giúp đỡ : Mình có bản vẽ chứa các view để show số posnumber ( những số nằm trong circle như hình đính kèm, không bao gồm text ), posnumber là những số nguyên liên tục. Nhưng quá trình làm view thì sẽ bị thiếu một số posnumber nào đó, mình muốn tìm ra những số posnumber bị thiếu này. Ví dụ số posnumber của mình chạy liên tục từ 2000 đến 2150, nhưng trong bản vẽ có thể sẽ bị thiếu một vài số nào đó, nên mình muốn show ra những số bị thiếu này để kiểm tra. Vậy xin nhờ ace giúp đỡ, mình cảm ơn trước !
 

image.png

Gửi bạn lisp in tất cả PosNumber ra màn hình, việc thiếu số nào là do bạn tự so sánh và tìm ra.

;----------- 
(defun c:PrincPosNumber ( / ss posNumLst lst)
  (if (setq ss (ssget (list (cons 0 "ARC") (cons 40 100.0))) )
    (progn
      (repeat (setq i (sslength ss))
	(setq ent (ssname ss (setq i (1- i)))
	      pt (cdr (assoc 10 (entget ent))))
	(if (not (vl-position pt lst))
	  (progn
	    (if (setq ssMtxt (ssget "_C" pt (polar pt 0.78 60) (list (cons 0 "MTEXT") ) ) )
	      (progn
		(setq str (cdr (assoc 1 (entget (ssname ssMtxt 0))))
		      posNum (LM:UnFormat str nil))
		(if (setq vt (vl-string-position (ascii " ") posNum)  )
		  (setq posNum (substr posNum 1 vt)))
		(if (not (vl-position posNum posNumLst))
		  (setq posNumLst (cons posNum posNumLst)))))
	    (setq lst (cons pt lst))) )	)
      (if posNumLst
	(foreach posNum (vl-sort posNumLst '<)
	  (princ (strcat "\n" posNum ))  ))    )   )
  (princ )  )
(vl-load-com)

;;-------------------=={ UnFormat String }==------------------;;
;;                                                            ;;
;;  Returns a string with all MText formatting codes removed. ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright c 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  str - String to Process                                   ;;
;;  mtx - MText Flag (T if string is for use in MText)        ;;
;;------------------------------------------------------------;;
;;  Returns:  String with formatting codes removed            ;;
;;------------------------------------------------------------;;
(defun LM:UnFormat ( str mtx / _replace rx )    
    (defun _replace ( new old str )
        (vlax-put-property rx 'pattern old)
        (vlax-invoke rx 'replace str new)    )
    (if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
        (progn
            (setq str
                (vl-catch-all-apply
                    (function
                        (lambda ( )
                            (vlax-put-property rx 'global     actrue)
                            (vlax-put-property rx 'multiline  actrue)
                            (vlax-put-property rx 'ignorecase acfalse) 
                            (foreach pair
                               '(
                                    ("\032"    . "\\\\\\\\")
                                    (" "       . "\\\\P|\\n|\\t")
                                    ("$1"      . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]")
                                    ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
                                    ("$1$2"    . "\\\\(\\\\S)|[\\\\](})|}")
                                    ("$1"      . "[\\\\]({)|{")
                                )
                                (setq str (_replace (car pair) (cdr pair) str))
                            )
                            (if mtx
                                (_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
                                (_replace "\\"   "\032" str) ) ) ) ) )
            (vlax-release-object rx)
            (if (null (vl-catch-all-error-p str))
                str )  )  ))

 

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, limfx đã nói:

Bài này rối quá làm xuôi thì được chứ ngược mình chưa tìm ra cách. 

Để đơn giản hơn bạn nên thay Mtext bằng Block att  để dễ thống kê.

Khi tạo Viewport thì thống kê luôn trên Viewport đó.

Ý bạn sao?

Cảm ơn bạn đã bỏ thời gian ra giúp mình, để mình thử thêm vài cách nữa xem thế nào.

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
9 phút trước, gia_bach đã nói:

Gửi bạn lisp in tất cả PosNumber ra màn hình, việc thiếu số nào là do bạn tự so sánh và tìm ra.


;----------- 
(defun c:PrincPosNumber ( / ss posNumLst lst)
  (if (setq ss (ssget (list (cons 0 "ARC") (cons 40 100.0))) )
    (progn
      (repeat (setq i (sslength ss))
	(setq ent (ssname ss (setq i (1- i)))
	      pt (cdr (assoc 10 (entget ent))))
	(if (not (vl-position pt lst))
	  (progn
	    (if (setq ssMtxt (ssget "_C" pt (polar pt 0.78 60) (list (cons 0 "MTEXT") ) ) )
	      (progn
		(setq str (cdr (assoc 1 (entget (ssname ssMtxt 0))))
		      posNum (LM:UnFormat str nil))
		(if (setq vt (vl-string-position (ascii " ") posNum)  )
		  (setq posNum (substr posNum 1 vt)))
		(if (not (vl-position posNum posNumLst))
		  (setq posNumLst (cons posNum posNumLst)))))
	    (setq lst (cons pt lst))) )	)
      (if posNumLst
	(foreach posNum (vl-sort posNumLst '<)
	  (princ (strcat "\n" posNum ))  ))    )   )
  (princ )  )
(vl-load-com)

;;-------------------=={ UnFormat String }==------------------;;
;;                                                            ;;
;;  Returns a string with all MText formatting codes removed. ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright c 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  str - String to Process                                   ;;
;;  mtx - MText Flag (T if string is for use in MText)        ;;
;;------------------------------------------------------------;;
;;  Returns:  String with formatting codes removed            ;;
;;------------------------------------------------------------;;
(defun LM:UnFormat ( str mtx / _replace rx )    
    (defun _replace ( new old str )
        (vlax-put-property rx 'pattern old)
        (vlax-invoke rx 'replace str new)    )
    (if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
        (progn
            (setq str
                (vl-catch-all-apply
                    (function
                        (lambda ( )
                            (vlax-put-property rx 'global     actrue)
                            (vlax-put-property rx 'multiline  actrue)
                            (vlax-put-property rx 'ignorecase acfalse) 
                            (foreach pair
                               '(
                                    ("\032"    . "\\\\\\\\")
                                    (" "       . "\\\\P|\\n|\\t")
                                    ("$1"      . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]")
                                    ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
                                    ("$1$2"    . "\\\\(\\\\S)|[\\\\](})|}")
                                    ("$1"      . "[\\\\]({)|{")
                                )
                                (setq str (_replace (car pair) (cdr pair) str))
                            )
                            (if mtx
                                (_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
                                (_replace "\\"   "\032" str) ) ) ) ) )
            (vlax-release-object rx)
            (if (null (vl-catch-all-error-p str))
                str )  )  ))

 

Cảm ơn bạn, để mình thử từ đoạn lisp này lấy ra số so sánh với dãy số mình cần rồi từ đó tìm ra số bị thiếu xem thế nào.

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 vẽ của bạn khù khoằm mỗi đoạn số nó k tách rời nên phải stripped nội dung thừa đi th. 
Mình k để điều kiện, lúc thao tác bạn layiso layer 100 ra nhé
 

(defun c:findmissing(/ _miss LM:UnFormat n s lstNum str stripped num)
;Edit Ketxu from CADViet.com
;Cre : LM, pBe 
;========== PRIVATE FUNCTION 
(defun _missInteger (l / tmp)
	(repeat 		 
		(- (setq lv (apply 'max l))
			(apply 'min l)
		)		
		(if (not (member (setq lv (1- lv)) l))
			(setq tmp (cons lv tmp))
		)
	)
	tmp
) 


;;-------------------=={ UnFormat String }==------------------;;
;;                                                            ;;
;;  Returns a string with all MText formatting codes removed. ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright c 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  str - String to Process                                   ;;
;;  mtx - MText Flag (T if string is for use in MText)        ;;
;;------------------------------------------------------------;;
;;  Returns:  String with formatting codes removed            ;;
;;------------------------------------------------------------;;
(defun LM:UnFormat ( str mtx / _replace rx )    
    (defun _replace ( new old str )
        (vlax-put-property rx 'pattern old)
        (vlax-invoke rx 'replace str new)    )
    (if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
        (progn
            (setq str
                (vl-catch-all-apply
                    (function
                        (lambda ( )
                            (vlax-put-property rx 'global     actrue)
                            (vlax-put-property rx 'multiline  actrue)
                            (vlax-put-property rx 'ignorecase acfalse) 
                            (foreach pair
                               '(
                                    ("\032"    . "\\\\\\\\")
                                    (" "       . "\\\\P|\\n|\\t")
                                    ("$1"      . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]")
                                    ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
                                    ("$1$2"    . "\\\\(\\\\S)|[\\\\](})|}")
                                    ("$1"      . "[\\\\]({)|{")
                                )
                                (setq str (_replace (car pair) (cdr pair) str))
                            )
                            (if mtx
                                (_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
                                (_replace "\\"   "\032" str) ) ) ) ) )
            (vlax-release-object rx)
            (if (null (vl-catch-all-error-p str))
                str )  )  ))

;========== MAIN PROGRAM

(if (setq s (ssget (list (cons 0 "*TEXT"))))
	(progn 
		(repeat (setq n (sslength s))
			(setq 
				e (ssname s (setq n (1- n)))
				str (cdr(assoc 1 (entget e)))
				str (substr str 1 (vl-string-search "\\P" str))
				stripped (LM:UnFormat str nil)
				num (distof stripped)
			)
			(if num (setq lstNum (cons (fix num) lstNum)))				
		)
		(if lstNum 				
			(princ (strcat "\nMiss :" (vl-princ-to-string (_missInteger lstNum) )))			
		)
	)
)
	
(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

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

×