Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ngohung104

Nối text cao độ

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

Xin chào các bạn. Mình có 1 vấn đề muốn nhờ mọi người giúp đở. Mình có 1 file cao độ gồm các thành phần

1: Phần nguyên

2: Phần thập phân

3: Cao độ nằm giửa vòng tròn.

Mình muốn nhờ mọi người giúp mình viết 1 lisp thỏa mản:

A: Nối phần nguyên và phần thập phân lại

B: Điểm đặt của text nối nằm đúng vị trí cao độ giửa vòng tròn.

==============

Minh có tham khảo các bài viết trên diễn đàn rồi nhưng kết quả không đúng như yêu cầu:

https://www.cadviet.com/forum/topic/68678-text-cao-độ-của-bình-đồ-bị-tách-làm-nhiều-đối-tượng/

==> Điểm đặt không thỏa mản B

 

https://www.cadviet.com/forum/topic/62937-giúp-đởphần-nguyên-và-phần-thập-phân-chia-làm-2-text/

==> lisp rất hay, giải quyết hàng loạt trong 1 thao tác nhưng text nối được điểm đặt không thỏa mản B (Nếu được thì xin phép tác giả có thể sửa trên lisp này được thì hay quá)

 

Và rất nhiều bài viết liên quan nửa nhưng không giải quết được

 

==============

Cám ơn và chúc mọi người sức khỏe.

Vidu_Noitext.dwg

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ẽ bạn gửi không cần lisp gì cả. Xuất toạ độ Point ra là có cao độ Z. Phun lại là xong.

Nếu như Point hoặc Circle không có cao độ (khác 0 hoặc khác giá trị chuẩn nhưng không đều) thì mới cần đến việc viết theo yêu cầu. 

Liên hệ mình Zalo: 0972.0168.25 để trao đổi thêm

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
Quote
1 giờ} trướ}c, thanhduan2407 đã nói:

Bản vẽ bạn gửi không cần lisp gì cả. Xuất toạ độ Point ra là có cao độ Z. Phun lại là xong.

 Nếu như Point hoặc Circle không có cao độ (khác 0 hoặc khác giá trị chuẩn nhưng không đều) thì mới cần đến việc viết theo yêu cầu. 

Liên hệ mình Zalo: 0972.0168.25 để trao đổi thêm

Bản vẽ bạn gửi không cần lisp gì cả. Xuất toạ độ Point ra là có cao độ Z. Phun lại là xong.

 Nếu như Point hoặc Circle không có cao độ (khác 0 hoặc khác giá trị chuẩn nhưng không đều) thì mới cần đến việc viết theo yêu cầu. 

Liên hệ mình Zalo: 0972.0168.25 để trao đổi thêm

 

Đúng như bạn nói là có cao độ Z rồi nhưng

1: Mỗi tâm vòng tròn đều có 1 cao độ đúng và 1 cao độ Z=10

Mình đả thử cách xóa toàn bộ point có Z = 10 thì những điểm có cao độ đúng bằng 10 sẽ bị mất cao độ

2: Có nhiều vòng còn có đến 3, 4 cao độ khác nhau và không có giá trị nào đúng  trong đó.

 

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

 

Đúng như bạn nói là có cao độ Z rồi nhưng

1: Mỗi tâm vòng tròn đều có 1 cao độ đúng và 1 cao độ Z=10

Mình đả thử cách xóa toàn bộ point có Z = 10 thì những điểm có cao độ đúng bằng 10 sẽ bị mất cao độ

2: Có nhiều vòng còn có đến 3, 4 cao độ khác nhau và không có giá trị nào đúng  trong đó.

 

Cần 1 bản vẽ thực tế, với bản vẽ mẫu với 1 vài cao độ như này thì việc nối không khó. Các bạn đưa bản mẫu quá lý tưởng đến khi vào thực tế text nó chồng lên nhau lại kêu sao lisp chạy không đúng rồi lại yêu cầu người viết bổ sung này nọ, rất khó cho người viết.

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

Cần 1 bản vẽ thực tế, với bản vẽ mẫu với 1 vài cao độ như này thì việc nối không khó. Các bạn đưa bản mẫu quá lý tưởng đến khi vào thực tế text nó chồng lên nhau lại kêu sao lisp chạy không đúng rồi lại yêu cầu người viết bổ sung này nọ, rất khó cho người viết.

Cảm ơn bạn đã quan tâm. Mình xin gửi lại bạn file đầy đủ hơn.

Vidu_Noitext_2.dwg

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

 

3 giờ trước, ngohung104 đã nói:

Cảm ơn bạn đã quan tâm. Mình xin gửi lại bạn file đầy đủ hơn.

Vidu_Noitext_2.dwg

Mình xét khoảng cách min đến tâm vòng tròn nên sẽ có 1 số trường hợp text điểm này nhưng gần vòng tròn điểm kia

với lại với tập điểm lớn như file bạn gửi sẽ chạy mất nhiều thời gian (Do trình chỉ xử lý được đến này thôi)

Giải pháp chọn từng vùng để chạy

Bạn dùng tạm cái này nhé!

(defun timtext (point lsttext /)
(setq lstcaodo (mapcar '(lambda (e) (cons (cdr (assoc 10 (entget e))) (cdr (assoc 1 (entget e))))) lsttext))
(setq kcminpoint (vl-sort lstcaodo '(lambda(x y / tmx tmy) (setq tmx (distance (list (car (car x)) (cadr (car x)) 0) point)  tmy (distance (list (car (car y)) (cadr (car y)) 0) point))
                 (< tmx tmy))))
(setq pointtim (list point (car kcminpoint) (cadr kcminpoint)))
)
(defun c:GTEXT (/ luubatdiem spc tapchon tapdiem lstss text gtricaodo phannguyen p1
				phapphan gtridien diemtam)
(command "undo" "BE")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setvar "CMDECHO" 0)
;;;;;;;;;;;;;;;;;;;;;;;
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))

(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
(setq h (getreal "\nNhap cao chu:"))
(prompt "\nchon tap diem Point Text")
(setq tapchon (acet-ss-to-list (ssget (list (cons 0 "CIRCLE,TEXT")))))
(setq tapdiem (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "CIRCLE")) tapchon))
(setq lstss (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "TEXT")) tapchon))
(foreach ent tapdiem
(setq p1 (cdr (assoc 10 (entget ent))))
(setq text (timtext p1 lstss))
(setq gtricaodo (vl-sort (list (cadr text) (caddr text)) '(lambda(x y) (< (car (car x)) (car (car y))))))
(setq phannguyen (cdr (car gtricaodo)))
(setq phapphan (cdr (cadr gtricaodo)))
(setq gtridien (strcat phannguyen "." phapphan))
(setq diemtam (car text))
(vla-put-Layer (vla-addtext spc gtridien (vlax-3d-point diemtam) h) "Caodo")
)
(setvar "osmode" luubatdiem)
(setvar "CMDECHO" 1)
(command "undo" "End")
)

 

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

Mình xét khoảng cách min đến tâm vòng tròn nên sẽ có 1 số trường hợp text điểm này nhưng gần vòng tròn điểm kia

với lại với tập điểm lớn như file bạn gửi sẽ chạy mất nhiều thời gian (Do trình chỉ xử lý được đến này thôi)

Giải pháp chọn từng vùng để chạy

Bạn dùng tạm cái này nhé!

Thank bạn đã giúp đở nhé. Nhưng đối với những tập dử liệu lớn thì lâu quá, m bị treo máy luôn. Và thêm nửa là vẫn có kha khá tọa độ bị sai bạn à.

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

Thank bạn đã giúp đở nhé. Nhưng đối với những tập dử liệu lớn thì lâu quá, m bị treo máy luôn. Và thêm nửa là vẫn có kha khá tọa độ bị sai bạn à.

Sửa lại cho bạn nhưng kết quả nó phụ vẫn phụ thuộc vào khoảng cách text và tâm vòng tròn nhé

(defun c:GTEXT (/ luubatdiem spc tapchon tapdiem lstss text gtricaodo phannguyen p1
				phapphan gtridien diemtam)
(command "undo" "BE")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setvar "CMDECHO" 0)
;;;;;;;;;;;;;;;;;;;;;;;
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))

(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
(setq h (getreal "\nNhap cao chu:"))
(prompt "\nchon tap diem Point Text")
(setq tapchon (acet-ss-to-list (ssget (list (cons 0 "CIRCLE")))))
(setq tapdiem (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "CIRCLE")) tapchon))
;(setq lstss (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "TEXT")) tapchon))
(foreach ent tapdiem
(setq p1 (cdr (assoc 10 (entget ent))))
(setq p2 (polar p1 (* 3 (/ pi 4)) 3))
(setq p3 (polar p1 (* 1 (/ pi -4)) 3))
(vla-ZoomCenter (vlax-get-acad-object) (vlax-3D-point p1) 200)
(setq lstss (acet-ss-to-list (ssget  "C" p2 p3 (list (cons 0 "TEXT")))))
(setq text (timtext p1 lstss))
(if text
(progn
(setq gtricaodo (vl-sort (list (cadr text) (caddr text)) '(lambda(x y) (< (car (car x)) (car (car y))))))
(setq phannguyen (cdr (car gtricaodo)))
(setq phapphan (cdr (cadr gtricaodo)))
(setq gtridien (strcat phannguyen "." phapphan))
(setq diemtam (car text))
(vla-put-Layer (vla-addtext spc gtridien (vlax-3d-point diemtam) h) "Caodo")
)
)
)
(setvar "osmode" luubatdiem)
(setvar "CMDECHO" 1)
(command "undo" "End")
)

 

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

Sửa lại cho bạn nhưng kết quả nó phụ vẫn phụ thuộc vào khoảng cách text và tâm vòng tròn nhé


(defun c:GTEXT (/ luubatdiem spc tapchon tapdiem lstss text gtricaodo phannguyen p1
				phapphan gtridien diemtam)
(command "undo" "BE")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setvar "CMDECHO" 0)
;;;;;;;;;;;;;;;;;;;;;;;
(setq spc (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-Acad-Object))))

(command "-layer" "n" "Caodo" "c" 4 "Caodo" "")
(setq h (getreal "\nNhap cao chu:"))
(prompt "\nchon tap diem Point Text")
(setq tapchon (acet-ss-to-list (ssget (list (cons 0 "CIRCLE")))))
(setq tapdiem (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "CIRCLE")) tapchon))
;(setq lstss (vl-remove-if-not '(lambda (x) (= (cdr (assoc 0 (entget x))) "TEXT")) tapchon))
(foreach ent tapdiem
(setq p1 (cdr (assoc 10 (entget ent))))
(setq p2 (polar p1 (* 3 (/ pi 4)) 3))
(setq p3 (polar p1 (* 1 (/ pi -4)) 3))
(vla-ZoomCenter (vlax-get-acad-object) (vlax-3D-point p1) 200)
(setq lstss (acet-ss-to-list (ssget  "C" p2 p3 (list (cons 0 "TEXT")))))
(setq text (timtext p1 lstss))
(if text
(progn
(setq gtricaodo (vl-sort (list (cadr text) (caddr text)) '(lambda(x y) (< (car (car x)) (car (car y))))))
(setq phannguyen (cdr (car gtricaodo)))
(setq phapphan (cdr (cadr gtricaodo)))
(setq gtridien (strcat phannguyen "." phapphan))
(setq diemtam (car text))
(vla-put-Layer (vla-addtext spc gtridien (vlax-3d-point diemtam) h) "Caodo")
)
)
)
(setvar "osmode" luubatdiem)
(setvar "CMDECHO" 1)
(command "undo" "End")
)

 

Cảm ơn bạn nhé, tốc độ xử lý nhanh hơn trước rất nhiều rồi. Nhưng vẫn vài text bị lỗi mà mình dò thì k biết lỗi như thế nào.

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

Cảm ơn bạn nhé, tốc độ xử lý nhanh hơn trước rất nhiều rồi. Nhưng vẫn vài text bị lỗi mà mình dò thì k biết lỗi như thế nào.

image.png

add zalo gửi file mình xem nhé

zalo: 0848.998.045

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 4/10/2021 tại 14:38, huunhantvxdts đã nói:

add zalo gửi file mình xem nhé

zalo: 0848.998.045

Cảm ơn các anh chị đã giúp đở và hổ trợ ạ. Em đã giải quyết được bài toán

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
4 giờ trước, tranloi12c đã nói:

chuyển point thành text rồi dùng lisp lọc text chồng đè của bác gia_bach là xong rồi nối text làm gì cho sai ra https://www.cadviet.com/forum/topic/23110-viết-giúp-lisp-xoá-text-trong-khoảng-nhất-định/?tab=comments#comment-104545

 

Thế bạn không đọc bản vẽ rồi. Tại một vị trí có 3 điểm point 3 cao độ khác nhau. Trong 3 cao độ đó chưa chắc đúng với cao độ text đã thể hiện, Nên giải pháp người ta đưa ra là nối text lại với nhau là chắc nhất. 

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

Lisp này nếu dùng block att thì bản vẽ sẽ gọn đẹp hơn là dùng text với justify left. Block có thể gồm luôn 2 Attdef, point và circle sẽ không bị rời rạc như hiện nay.

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
2 giờ trước, huunhantvxdts đã nói:

Thế bạn không đọc bản vẽ rồi. Tại một vị trí có 3 điểm point 3 cao độ khác nhau. Trong 3 cao độ đó chưa chắc đúng với cao độ text đã thể hiện, Nên giải pháp người ta đưa ra là nối text lại với nhau là chắc nhất. 

e xem rồi bác ạ, có chỗ 4 point cùng 1 vị trí nữa nhưng lọc 2 3 lần là hết thôi, point theo thứ tự 1 vs 3 là z chuẩn 2 vs 4 z=10.0 nên để cỡ text nhỏ lọc vs đổi lại layer vài lần là lọc đc hết mà còn vụ nối text trc h e chưa tìm được lisp nào thấy nối chuẩn cả vì kiểu gì cũng dính vụ text này nối vào text kia. Cái này chắc là phun điểm bằng phần mềm riêng nên nó là acadproxy phải explode ra mới bị phá vỡ cấu trục như thế ấy ạ

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

Lisp này nếu dùng block att thì bản vẽ sẽ gọn đẹp hơn là dùng text với justify left. Block có thể gồm luôn 2 Attdef, point và circle sẽ không bị rời rạc như hiện nay.

Cái này chủ yếu người ta lấy cao độ để chuyển vào phần mềm thì phả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

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
Đăng nhập để thực hiện theo  

×