Đến nội dung


Hình ảnh

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


  • Please log in to reply
5 replies to this topic

#1 giaptk3

giaptk3

    biết vẽ pline

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

Đã gửi 04 March 2008 - 09:43 AM

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
  • 0

#2 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 04 March 2008 - 10:37 AM

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.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3 giaptk3

giaptk3

    biết vẽ pline

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

Đã gửi 04 March 2008 - 11:16 AM

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
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 04 March 2008 - 01:50 PM

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.c...inh_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)
)

  • 3

#5 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 04 March 2008 - 08:56 PM

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
  • 0

#6 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 04 March 2008 - 09:42 PM

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

  • 1