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

{Cần giúp đỡ} Lisp nối text cao độ, giữ nguyên tọa độ điểm chèn cũ là circle

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

Chào các bác trên diễn đàn. Số là em có một bình đồ có chứa các cao độ san nền (file http://www.cadviet.com/upfiles/4/115015_binh_do_vi_du.dwg) Các cao độ này sẽ được tận dụng để tạo mô hình địa hình cho bước sau.

Tuy nhiên các cao độ này được xuất ra dạng attribute block. Sau khi burst các block này, kết quả thu được là 2 dtext rời rạc hai bên (bên trái là cao độ phần nguyên, bên phải là cao độ phần thập phân), đặc biệt điểm chèn (tọa độ chính xác của điểm cao độ) lại thể hiện bởi một circle.

Mục tiêu và ước nguyện cả buổi chiều của em là "nối được cao độ này lại (gồm cả dấu chấm chia phần thập phân) với điểm chèn text chính tại tim vòng tròn circle nói trên". Tiếc cái là sắp tối rồi mà em search không ra chủ đề nào phù hợp. Một số lisp các cao thủ viết ở đây: http://www.cadviet.com/forum/topic/65194-yeu-cau-lisp-noi-text-tu-dong/ hay ở đây:http://www.cadviet.com/forum/topic/13074-lisp-ghep-text-can-giup-do/ đều không có tác dụng đúng với bài toán củ chuối của em kể trên. Do đề bài khác nhau hoặc do em nghiên cứu chưa đúng cách cũng nên.

Vì đó, em mạn phép lập topic này nhờ các cao thủ trên forum hoặc các mem đã từng gặp tình trạng tương tự và đã tìm ra cách giải quyết giúp đỡ em vài đường. Đề bài rõ hơn em đính kèm file Cad đây: http://www.cadviet.com/upfiles/4/115015_text_vi_du.dwg.

 

Em cảm ơn và chúc các bác những ngày làm việc nhiều hiệu quả!

 

PS: Nếu chủ đề bị trùng lặp quá nhiều mong các MOD giúp em cái link trước khi cho cháu nó vô bãi 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

Bạn dùng thử Lisp sau nhé. Không cần phá, để nguyên Att Block.

Lệnh: wt

 

 

 

(defun Read_bl-pt(bl / sslist eni enlist ih dh)
(setq sslist (entget bl))
(if (= (cdr (assoc 66 sslist)) 1)
(progn
(setq eni (entnext bl))
(setq enlist (entget eni))
(while (/= (cdr (assoc 0 enlist)) "SEQEND")
(if (AND (= (cdr (assoc 0 enlist)) "ATTRIB") (= (cdr (assoc 2 enlist)) "IH"))
(setq ht (cdr (assoc 40 enlist))
ih (cdr (assoc 1 enlist))
)
)
(if (AND (= (cdr (assoc 0 enlist)) "ATTRIB") (= (cdr (assoc 2 enlist)) "DH"))
(setq dh (cdr (assoc 1 enlist)))
)
(setq eni (entnext eni))
(setq enlist (entget eni))
)
)
)
(list ih dh)
)

(defun AddText(string point height / mspace text)
(vl-load-com)
(setq mspace (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
(setq text (vla-AddText mspace string (vlax-3d-point point) height))
)

(defun Join_List(li)
(if (and (car li) (cadr li))
(strcat (car li) "." (cadr li))
(strcat (car li) ".00")
)
)

(defun c:wt(/ ssx si ssi str_out)
(command ".undo" "be")
(setq ssx (ssget '((0 . "INSERT") (2 . "bl-pt"))))
(setq si 0)
(while (< si (sslength ssx))
(setq ssi (ssname ssx si))
(setq str_out (JOIN_LIST (READ_BL-PT ssi)))
(ADDTEXT str_out (cdr (assoc 10 (entget ssi))) ht)
(vla-delete (vlax-ename->vla-object ssi))
(setq si (1+ si))
)
(command ".undo" "e")
(princ)
(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

Cảm ơn hai bác đã xem và cho em một phương án.

Topic mà bác thanhduan2407 link cho em là một hướng giải quyết vấn đề tốt. Như em hiểu theo ý bác là em có thể phá att block, sau đó nối lại bằng một số lisp có trên forum (thêm được dấu chấm), sử dụng lisp nói trên để đẩy điểm chèn về tim circle gần nhất, cuối cùng xoá hết circle đi là ok. Cảm ơn bác rất nhiều.

Lisp của bác thehost31 giúp em thì quá tuyệt vời, nó giải quyết đúng đắn nhất bài toán mà em đang gặp phải theo hướng đơn giản dễ dàng nhất. Chỉ có điều sau khi thử với lệnh wt, phần thập phân (2 chữ số) bị chuyển hết về 00. Ví dụ 2.32 thành 2.00. Còn lại mọi thứ đều hoạt động tốt, điểm chèn của block rất chính xác. Bác thehost31 và các cao nhân trên forum có thể bớt tý thời gian kiểm tra lisp giúp em để bài toán đi tới đích cuối được khô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

Tìm chỗ

(cdr (assoc 2 enlist))

Sửa thành

(strcase (cdr (assoc 2 enlist)))

Cảm ơn tốt nhất là bấm vào mũi tên xanh dưới bài viết

  • Like 1
  • 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

Cảm ơn bác ndtnv rất nhiều. Em tìm không thấy nút thanks, ra là do chưa nhìn kỹ. Hic, lên Cadviet suốt vậy mà... Như vậy là bài toán của em đã được giải quyết nhanh gọn

http://www.cadviet.com/upfiles/4/115015_wt__sua_block_cao_do_binh_do.lsp

Chúc các bác những ngày làm việc hiệu quả.

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

×