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

Ghép số bị tách trong bình đồ

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

em có một bình đồ nhưng số trong đó bị tách ra nên rất khó làm việc

cỏ thể giúp em ghép lại được không.

<a href="http://www.cadviet.com/upfiles/binh_do_kenh.dwg" target="_blank">http://www.cadviet.com/upfiles/binh_do_kenh.dwg</a>

cảm ơn nhiều

 

Xin lổi nếu cái dấu , trong text của bạn mà là point thì tôi có lisp làm được.

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
Xin lổi nếu cái dấu , trong text của bạn mà là point thì tôi có lisp làm được.

vậy cũng được bạn có thể cho mình cài lisp đó được không

cảm ơn nhiều

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
em có một bình đồ nhưng số trong đó bị tách ra nên rất khó làm việc

cỏ thể giúp em ghép lại được không.

http://www.cadviet.com/upfiles/binh_do_kenh.dwg

cảm ơn nhiều

 

Lệnh JBT (Join Broken Text) dưới đây sẽ làm điều bạn muốn:

(defun c:jbt ()
 (setq fuzz 1.5)
 (defun ok (e1 e2)
   (setq p1 (cdr (assoc 10 (entget e1)))
  h1 (cdr (assoc 40 (entget e1)))
  p2 (cdr (assoc 10 (entget e2)))
  box1 (textbox (entget e1))
  d1  (distance (car box1) (cadr box1))
  x1 (car p1)
  y1 (cadr p1)
  x2 (car p2)
  y2 (cadr p2)
   )
   (and (< (abs (- y2 y1)) h1)
 (< (abs (- x2 x1)) (* d1 fuzz))
   )
 )

 (setq	ss  (ssget '((0 . "TEXT")))
lst (ss2ent ss)
lst (vl-sort lst
	     '(lambda (e1 e2)
		(< (car (cdr (assoc 10 (entget e1))))
		   (car (cdr (assoc 10 (entget e2))))
		)
	      )
    )
 )
 (while (> (length lst) 1)
   (setq
     e1  (car lst)
     lst (cdr lst)
     e2  nil
   )
   (foreach e lst
     (if (ok e1 e)
(setq e2 e)
     )
   )
   (if	e2
     (progn
(setq
  tt  (entget e1)
  gt2 (cdr (assoc 1 (entget e2)))
  gt1 (cdr (assoc 1 (entget e1)))
  tt  (subst (cons 1 (strcat gt1 gt2)) (assoc 1 tt) tt)
  lst (vl-remove e2 lst)
)
(entmod tt)
(entdel e2)
     )
   )
 )

)

(defun ss2ent (ss / sodt index lstent)
 (setq
   sodt  (if ss
    (sslength ss)
    0
  )
   index 0
 )
 (repeat sodt
   (setq ent	 (ssname ss index)
  index	 (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)

  • Vote tăng 3

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
Lệnh JBT (Join Broken Text) dưới đây sẽ làm điều bạn muốn:

Lệnh quá hay!!! Nhưng góp ý và mong Bác nghiên cứu giúp: sau khi text được nối bị lệch vị trí sang trái, nếu giữ nguyên vị trí tại dấu chấm thì quá tuyệt 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
Lệnh quá hay!!! Nhưng góp ý và mong Bác nghiên cứu giúp: sau khi text được nối bị lệch vị trí sang trái, nếu giữ nguyên vị trí tại dấu chấm thì quá tuyệt vời

Là do điểm chèn nằm ở giữa text, nên không thay đổi điểm chèn thì text sẽ bị nhảy.

 

Nếu cho phép đổi điểm chèn và giữ tọa độ dấu chấm thì cải tiến của dưới đây sẽ làm được điều bạn muốn.

Lệnh vẫn là JBT:

 

(defun c:jbt ()
 (setq fuzz 1.5)
 (defun ok (e1 e2)
   (setq p1   (cdr (assoc 10 (entget e1)))
  h1   (cdr (assoc 40 (entget e1)))
  p2   (cdr (assoc 10 (entget e2)))
  box1 (textbox (entget e1))
  d1   (distance (car box1) (cadr box1))
  x1   (car p1)
  y1   (cadr p1)
  x2   (car p2)
  y2   (cadr p2)
   )
   (and (< (abs (- y2 y1)) h1)
 (< (abs (- x2 x1)) (* d1 fuzz))
   )
 )

 (setq	ss  (ssget '((0 . "TEXT")))
lst (ss2ent ss)
lst (vl-sort lst
	     '(lambda (e1 e2)
		(< (car (cdr (assoc 10 (entget e1))))
		   (car (cdr (assoc 10 (entget e2))))
		)
	      )
    )
 )
 (while (> (length lst) 1)
   (setq
     e1  (car lst)
     lst (cdr lst)
     e2  nil
   )
   (foreach e lst
     (if (ok e1 e)
(setq e2 e)
     )
   )
   (if	e2
     (progn
(setq
  tt  (entget e1)	  
  pnew (mapcar '+ (cdr (assoc 10 tt)) (car (textbox tt)))
  gt2 (cdr (assoc 1 (entget e2)))
  gt1 (cdr (assoc 1 (entget e1)))
  tt  (subst (cons 1 (strcat gt1 gt2)) (assoc 1 tt) tt)
  tt  (subst (cons 10 pnew) (assoc 10 tt) tt)
  tt  (subst (cons 72 0) (assoc 72 tt) tt)
  lst (vl-remove e2 lst)
)
(entmod tt)
(entdel e2)
     )
   )
 )

)

(defun ss2ent (ss / sodt index lstent)
 (setq
   sodt  (if ss
    (sslength ss)
    0
  )
   index 0
 )
 (repeat sodt
   (setq ent	 (ssname ss index)
  index	 (1+ index)
  lstent (cons ent lstent)
   )
 )
 (reverse lstent)
)

  • 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

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


×