Đến nội dung


Hình ảnh

nhập 2 text


  • Please log in to reply
25 replies to this topic

#1 thangkho

thangkho

    biết vẽ line

  • Members
  • PipPip
  • 26 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 March 2009 - 04:31 PM

Mong các anh giúp em chỉnh sửa file này. Đây là file cao độ hiện trạng, nhưng các số thập phân của cao độ đều bị tách rời thành 2 text khác nhau. Các anh có thể giúp em nhập lại thành 1 giá trị text được không? Ví dụ: 2 21 thành 2.21
  • 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 16 March 2009 - 05:09 PM

Mong các anh giúp em chỉnh sửa file này. Đây là file cao độ hiện trạng, nhưng các số thập phân của cao độ đều bị tách rời thành 2 text khác nhau. Các anh có thể giúp em nhập lại thành 1 giá trị text được không? Ví dụ: 2 21 thành 2.21
http://www.cadviet.c...es/xr_caodo.dwg

Theo hiểu biết của mình thì giữa 2 text này còn 1 đối tượng point hoặc circle nửa bạn đưa cả nó lên thì mình nối lại cho bạn. Nhưng về bạn phải ngồi tự kiểm tra lổi nhé.
  • 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 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 March 2009 - 08:55 PM

Mong các anh giúp em chỉnh sửa file này. Đây là file cao độ hiện trạng, nhưng các số thập phân của cao độ đều bị tách rời thành 2 text khác nhau. Các anh có thể giúp em nhập lại thành 1 giá trị text được không? Ví dụ: 2 21 thành 2.21
http://www.cadviet.c...es/xr_caodo.dwg

Bạn sử dụng Lisp này xem.
Lisp yêu cầu :
Chọn Text 1
Chọn Text 2
Sau đó nối theo yêu cầu của bạn
(defun c:n2t()
(setq te1 (car(entsel "\n Chon text 1 :")))
(setq te2 (car(entsel "\n Chon text 2 :")))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss1)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n")
(Command "text" po hei "0" (strcat nd1 "." nd2))
(command "erase" te1 "")
(command "erase" te2 "")
(Princ)
)
Chúc bạn thành công :undecided:
  • 2

#4 thangkho

thangkho

    biết vẽ line

  • Members
  • PipPip
  • 26 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 March 2009 - 11:05 PM

Bạn sử dụng Lisp này xem.
Lisp yêu cầu :
Chọn Text 1
Chọn Text 2
Sau đó nối theo yêu cầu của bạn

(defun c:n2t()
(setq te1 (car(entsel "\n Chon text 1 :")))
(setq te2 (car(entsel "\n Chon text 2 :")))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss1)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n")
(Command "text" po hei "0" (strcat nd1 "." nd2))
(command "erase" te1 "")
(command "erase" te2 "")
(Princ)
)
Chúc bạn thành công :undecided:

to Duy: em đưa tòan bộ file rồi đó anh
to Tue: cảm ơn bạn đã giúp, nhưng nhiều text quá mình phải chọn từng cái thì lâu quá.
Có cách nào làm nhanh hơn ko ?
  • 0

#5 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 17 March 2009 - 12:15 AM

to Duy: em ðýa tòan bộ file rồi ðó anh
to Tue: cảm õn bạn ðã giúp, nhýng nhiều text quá mình phải chọn từng cái thì lâu quá.
Có cách nào làm nhanh hõn ko ?

Tôi có ý kiến thế này.
Bạn thấy tẽt trên có hai loại. Loại ðịnh vị R và loại dịnh vị L và chúng có cùng tung ðộ và hoành ðộ cách nhau 0.8m
Trýớc hết bạn chọn tất cả tẽt ðịnh vi R, dời chúng ðoạn x=0.8 (lúc này loại loại tẽt này ðã cùng tọa ðộ theo từng cặp týõng ứng của chúng).
Sau ðó chọn lại chúng lần nữa, lập vòng lặp ði qua từng ðối týợng tẽt và lập danh sách có dạng ds1 = ((toado1 ename1) (toado2 ename2) ... (toadoN enameN)).
Tiếp theo bạn chọn tất cả tẽt ðịnh vị L. lập vòng lặp ði qua từng ðối týợng tẽt. mỗi lần nhý vậy bạn lấy tọa ðộ pI và text (L) của chúng. dùng hàm (assoc pI ds1) bạn sẽ ðýợc (toadoI nameI), từ nameI bạn sẽ ðýợc text ®, công việc tiếp theo thì khá ðõn giản rồi.
Ghi chú : Tôi không rành vl lắm nên có những hàm vl ðã có.
  • 1

#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 17 March 2009 - 01:45 AM

to Duy: em đưa tòan bộ file rồi đó anh
to Tue: cảm ơn bạn đã giúp, nhưng nhiều text quá mình phải chọn từng cái thì lâu quá.
Có cách nào làm nhanh hơn ko ?

Chào bạn thangkho,
Bạn thử cái líp này xem có được không. Lisp này mình dựa trên lisp của bác Tue_NV và dựa trên suy luận rằng hai con số của bạn phải được nhập liên tiếp nhau vì nó thể hiện cao độ của điểm nhập. Nhưng do trên bản vẽ của bạn có những text không phải là các con số như vậy nên mình yêu cầu khi chạy lisp bạn phải chọn các đối tượng bằng cửa sổ qua hai điểm của đường chéo hình chữ nhật mà bạn sẽ nhập vào. Điều này giúp bạn loại bỏ các chữ không cần nối mà chỉ chọn các đối tượng là các cặp số cần nối thôi. Như vậy bạn có thể chọn một lần nhiều cặp số như vậy miễn là cái cửa sổ của bạn phải chứa toàn các cặp số định nối mà không có thêm bất cứ đối tượng ngoại lai nào. Tuy lisp này chưa hẳn đã đúng ý bạn nhưng nó có thể giúp bạn giảm bớt số lần chạy lisp để có thể hoàn thành toàn bộ các cặp số cần nối của bạn.
(defun c:n2t()
(setq ss (ssget "w" (getpoint "\n Chon diem thu nhat")

(getpoint "\n chon diem thu hai"))
n (sslength ss)
i 0
)
(While (< i n)
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss2)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n")
(Command "text" po hei "0" (strcat nd2 "." nd1))
(command "erase" te1 "")
(command "erase" te2 "")
(setq i (+ i 2))
)
(Princ)
)

Để tăng hiệu quả của lisp này bạn có thể đổi các text ngoại lai sang lớp khác với lớp của các cặp số cần nối (hiện tại nó là lớp "nen") và bổ sung một filter list '(8. "nen") vào trong hàm SSget là bạn sẽ có thể chơi một lần toàn bộ các cặp số có trên bản vẽ hiện hành của bạn.

Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 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 17 March 2009 - 07:57 AM

to Duy: em đưa tòan bộ file rồi đó anh

Nếu đây là toàn bộ file của bạn thì phần còn lại chắc chắn phải ở đâu đó (từ người giao file cho bạn chẳng hạn). Đối với file của bạn thì như tdvn đã phân tích là có thể làm được nhưng ngại vì trường hợp này không điển hình lắm. Mình nghỉ tốt nhất bạn tìm phần còn lại của file xem vì không thể có 1 file trụi lủi như vậy được.
  • 1

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


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 17 March 2009 - 08:06 AM

Chào bạn thangkho,
Bạn thử cái líp này xem có được không. Lisp này mình dựa trên lisp của bác Tue_NV và dựa trên suy luận rằng hai con số của bạn phải được nhập liên tiếp nhau vì nó thể hiện cao độ của điểm nhập. Nhưng do trên bản vẽ của bạn có những text không phải là các con số như vậy nên mình yêu cầu khi chạy lisp bạn phải chọn các đối tượng bằng cửa sổ qua hai điểm của đường chéo hình chữ nhật mà bạn sẽ nhập vào. Điều này giúp bạn loại bỏ các chữ không cần nối mà chỉ chọn các đối tượng là các cặp số cần nối thôi. Như vậy bạn có thể chọn một lần nhiều cặp số như vậy miễn là cái cửa sổ của bạn phải chứa toàn các cặp số định nối mà không có thêm bất cứ đối tượng ngoại lai nào. Tuy lisp này chưa hẳn đã đúng ý bạn nhưng nó có thể giúp bạn giảm bớt số lần chạy lisp để có thể hoàn thành toàn bộ các cặp số cần nối của bạn.

(defun c:n2t()
(setq ss (ssget "w" (getpoint "\n Chon diem thu nhat")

(getpoint "\n chon diem thu hai"))
n (sslength ss)
i 0
)
(While (< i n)
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss2)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n")
(Command "text" po hei "0" (strcat nd2 "." nd1))
(command "erase" te1 "")
(command "erase" te2 "")
(setq i (+ i 2))
)
(Princ)
)

Để tăng hiệu quả của lisp này bạn có thể đổi các text ngoại lai sang lớp khác với lớp của các cặp số cần nối (hiện tại nó là lớp "nen") và bổ sung một filter list '(8. "nen") vào trong hàm SSget là bạn sẽ có thể chơi một lần toàn bộ các cặp số có trên bản vẽ hiện hành của bạn.

Chúc bạn thành công.

Không đúng bác Bình ạ. Có lẽ do hàm ssget khi chạy nó chọn đối tượng không tuân theo quy luật như bác nghĩ.
Để kiểm tra lại kết quả file Lisp, bác cứ sử dụng File Lisp của bạn thangkho copy các số đó sang chổ khác. Sau chạy File Lisp bác hãy đối chiếu lại các con số sau khi chạy Lisp và các con số mà bạn thangkho yêu cầu nối mà xem. Nó không đúng.
Có lẽ mình nên chuyển theo hướng nghĩ của bác tdvn.
  • 0

#9 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 17 March 2009 - 08:15 AM

(setq ss (ssget "w" (getpoint "\n Chon diem thu nhat")

(getpoint "\n chon diem thu hai"))
n (sslength ss)
i 0
)

Mạn phép góp ý bác Bình tí mong bác không giận!
Bác bắt buộc chọn 2 điểm xong là lấy tập hợp chọn luôn là không hay, Bác cứ dùng ssget khi nào người dùng chọn xong thì enter để hoàn tất quá trình chọn. Và bác cũng nên cho điều kiện lọc text vào để lở có lộn đối tượng khác vào thì nó bỏ ra.
  • 1

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


#10 thangkho

thangkho

    biết vẽ line

  • Members
  • PipPip
  • 26 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 March 2009 - 08:42 AM

Tôi có &yacute; kiến thế này.
Bạn thấy tẽt trên có hai loại. Loại ðịnh vị R và loại dịnh vị L và chúng có cùng tung ðộ và hoành ðộ cách nhau 0.8m
Trýớc hết bạn chọn tất cả tẽt ðịnh vi R, dời chúng ðoạn x=0.8 (lúc này loại loại tẽt này ð&atilde; cùng tọa ðộ theo từng cặp týõng ứng của chúng).
Sau ðó chọn lại chúng lần nữa, lập v&ograve;ng lặp ði qua từng ðối týợng tẽt và lập danh sách có dạng ds1 = ((toado1 ename1) (toado2 ename2) ... (toadoN enameN)).
Tiếp theo bạn chọn tất cả tẽt ðịnh vị L. lập v&ograve;ng lặp ði qua từng ðối týợng tẽt. mỗi lần nhý vậy bạn lấy tọa ðộ pI và text (L) của chúng. dùng hàm (assoc pI ds1) bạn sẽ ðýợc (toadoI nameI), từ nameI bạn sẽ ðýợc text ®, công việc tiếp theo th&igrave; khá ðõn giản rồi.
Ghi chú : Tôi không rành vl lắm nên có những hàm vl ð&atilde; có.


Em không biết viết lisp, anh có thể viết ra giùm em được không?
  • 0

#11 thangkho

thangkho

    biết vẽ line

  • Members
  • PipPip
  • 26 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 March 2009 - 09:01 AM

Nếu đây là toàn bộ file của bạn thì phần còn lại chắc chắn phải ở đâu đó (từ người giao file cho bạn chẳng hạn). Đối với file của bạn thì như tdvn đã phân tích là có thể làm được nhưng ngại vì trường hợp này không điển hình lắm. Mình nghỉ tốt nhất bạn tìm phần còn lại của file xem vì không thể có 1 file trụi lủi như vậy được.


xin lỗi anh vào mọi người nha, hôm qua em tìm không kỹ, Em tìm thêm được file này, mong mọi ng7o72i giúp em

http://www.cadviet.c...iles/cao_do.dwg
  • 0

#12 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 17 March 2009 - 09:44 AM

xin lỗi anh vào mọi người nha, hôm qua em tìm không kỹ, Em tìm thêm được file này, mong mọi ng7o72i giúp em

http://www.cadviet.c...iles/cao_do.dwg

Của bạn đây. Hy vọng bạn có thời gian ngồi kiểm tra lổi.
Lưu ý với bạn vấn đề này đã có trên dd rồi lần sau bạn nên tìm trước khi hỏi nhé!
http://www.cadviet.c...les/cao_don.dwg
  • 1

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


#13 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 17 March 2009 - 10:27 AM

Em không biết viết lisp, anh có thể viết ra giùm em được không?

Bạn có thể tham khảo. Tôi lập theo file mẫu "xr_caodo.dwg" của bạn
(defun C:C2T( / SS1 SS2 n1 n2 i LIS1 P p1 lis2 st st1 st2)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(SETQ SS1 (SSGET "x" '((0 . "TEXT") (8 . "NEN") (72 . 2))))
(SETQ SS2 (SSGET "x" '((0 . "TEXT") (8 . "NEN") (72 . 0))))
(COMMAND "_.MOVE" SS1 "" '(0 0 0) '(0.8 0 0))
; (COMMAND "_.MOVE" SS2 "" '(0.4 0 0) '(0 0 0))
(setq i 0)
(while (< i (sslength ss1))
(setq n1 (ssname ss1 i))
(setq p (dxf n1 11) P (STRCAT (RTOS (CAR P) 2 3) (RTOS (CADR P) 2 3)))
(setq lis1 (append lis1 (list (list p n1))))
(setq i (1+ i))
)
(setq i 0)
(while (< i (sslength ss2))
(setq n2 (ssname ss2 i))
(setq p (dxf n2 10) P1 (STRCAT (RTOS (CAR P) 2 3) (RTOS (CADR P) 2 3)))
(setq lis2 (assoc p1 lis1))
(if lis2 (progn
(setq n1 (cadr lis2))
(setq st1 (dxf n1 1) st2 (dxf n2 1) st (strcat st1 "." st2))
(entmod (subst (cons 1 st) (assoc 1 (entget n1)) (entget n1)))
; (command "_.change" n2 "" "p" "c" 1 "")
(command "_.erase" n2 "")
))
(setq i (1+ i))
)
)
  • 1

#14 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 17 March 2009 - 11:09 AM

Bạn có thể tham khảo. Tôi lập theo file mẫu "xr_caodo.dwg" của bạn
(defun C:C2T( / SS1 SS2 n1 n2 i LIS1 P p1 lis2 st st1 st2)
(defun dxf( name n)
(cdr (assoc n (entget name)))
)
(SETQ SS1 (SSGET '((0 . "TEXT") (8 . "NEN") (72 . 2))))
(SETQ SS2 (SSGET '((0 . "TEXT") (8 . "NEN") (72 . 0))))
(COMMAND "_.MOVE" SS1 "" '(0 0 0) '(0.8 0 0))
; (COMMAND "_.MOVE" SS2 "" '(0.4 0 0) '(0 0 0))
(setq i 0)
(while (< i (sslength ss1))
(setq n1 (ssname ss1 i))
(setq p (dxf n1 11) P (STRCAT (RTOS (CAR P) 2 3) (RTOS (CADR P) 2 3)))
(setq lis1 (append lis1 (list (list p n1))))
(setq i (1+ i))
)
(setq i 0)
(while (< i (sslength ss2))
(setq n2 (ssname ss2 i))
(setq p (dxf n2 10) P1 (STRCAT (RTOS (CAR P) 2 3) (RTOS (CADR P) 2 3)))
(setq lis2 (assoc p1 lis1))
(if lis2 (progn
(setq n1 (cadr lis2))
(setq st1 (dxf n1 1) st2 (dxf n2 1) st (strcat st1 "." st2))
(entmod (subst (cons 1 st) (assoc 1 (entget n1)) (entget n1)))
; (command "_.change" n2 "" "p" "c" 1 "")
(command "_.erase" n2 "")
))
(setq i (1+ i))
)
)

Bác tdvn và các bác trên diễn đàn có thể giải thích dùm mã DXF 10, DXF 11 của đối tượng Text được không?
Cảm ơn các bác.
  • 0

#15 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 17 March 2009 - 11:16 AM

Bác tdvn và các bác trên diễn đàn có thể giải thích dùm mã DXF 10, DXF 11 của đối tượng Text được không?
Cảm ơn các bác.

10 = điểm canh lề thứ nhất.
11 = điểm canh lề thứ hai.
  • 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


#16 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 17 March 2009 - 11:23 AM

Bác tdvn và các bác trên diễn đàn có thể giải thích dùm mã DXF 10, DXF 11 của đối tượng Text được không?
Cảm ơn các bác.

mã dxf 10 chính là điểm định vị của tẽt có kiểu định vị "L". mã dxf 11 chính là điểm định vị của tẽt có kiểu định vị khác như "R", "C" ...
dxf 10 còn là điểm góc dưới trái của hộp textbox của đối tượng tẽt
  • 1

#17 elleHCSC

elleHCSC

    biết lệnh copy

  • Members
  • PipPipPip
  • 119 Bài viết
Điểm đánh giá: 98 (tàm tạm)

Đã gửi 17 March 2009 - 04:14 PM

Đầy đủ của cad này:

Hình đã gửi


Với text có dạng LEFT, FIT, ALIGNED thì vị trí đặt text là dxf 10
còn tất các các dạng canh lề khác như bottom, center, top.... v.v nó phụ thuộc code 72, 73 và vị trí đặt text là DXF 11.
  • 0
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 17 March 2009 - 08:58 PM

xin lỗi anh vào mọi người nha, hôm qua em tìm không kỹ, Em tìm thêm được file này, mong mọi ng7o72i giúp em

http://www.cadviet.c...iles/cao_do.dwg

Chào bạn thangkho,
Đây là cái lisp mình sửa lại dựa theo gợi ý của bác Duy và cái bản vẽ thực tế mà bạn gửi. Mình dựa vào cái đặc thù của các text cao độ nằm riêng trong lớp textcaodomia để phân loại nó ra và nối chúng lại theo cái lisp của bác Tue_nv.
Bạn hãy thử xem có đạt yêu cầu của bạn không nhé.
Thú thực là mình đã thử rồi và lisp chạy mất khoảng 30 giây thì xong bản vẽ của bạn. Kiểm tra thử một vài khu vực thì thấy ngon phết, nhưng kiểm tra toàn bộ thì chưa có thời gian, mong bạn thông cảm.
(defun c:n2t()
(setq ss (ssget "X" (list (cons 0 "TEXT") (cons 8 "TEXTCAODOMIA")))
n (sslength ss)
i 0
)
(While (< i n)
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss2)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n" "n")
(Command "text" po hei "0" (strcat nd2 "." nd1))
(command "erase" te1 "")
(command "erase" te2 "")
(setq i (+ i 2))
)
(Princ)
)

Nếu có gì chưa được bạn hãy cho mình biết để mình tìm cách hoàn thiện nhé. Thanks
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 thangkho

thangkho

    biết vẽ line

  • Members
  • PipPip
  • 26 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 March 2009 - 11:00 PM

Chào bạn thangkho,
Đây là cái lisp mình sửa lại dựa theo gợi ý của bác Duy và cái bản vẽ thực tế mà bạn gửi. Mình dựa vào cái đặc thù của các text cao độ nằm riêng trong lớp textcaodomia để phân loại nó ra và nối chúng lại theo cái lisp của bác Tue_nv.
Bạn hãy thử xem có đạt yêu cầu của bạn không nhé.
Thú thực là mình đã thử rồi và lisp chạy mất khoảng 30 giây thì xong bản vẽ của bạn. Kiểm tra thử một vài khu vực thì thấy ngon phết, nhưng kiểm tra toàn bộ thì chưa có thời gian, mong bạn thông cảm.

(defun c:n2t()
(setq ss (ssget "X" (list (cons 0 "TEXT") (cons 8 "TEXTCAODOMIA")))
n (sslength ss)
i 0
)
(While (< i n)
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss2)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n" "n")
(Command "text" po hei "0" (strcat nd2 "." nd1))
(command "erase" te1 "")
(command "erase" te2 "")
(setq i (+ i 2))
)
(Princ)
)

Nếu có gì chưa được bạn hãy cho mình biết để mình tìm cách hoàn thiện nhé. Thanks

Cảm ơn anh nhiều. Anh có thể chỉnh lại phần text sau khi đổi có dạng jutify là left trùng với điểm point có layer là "TEXTCAODOCOC" ko?
  • 0

#20 tdvn

tdvn

    biết lệnh rotate

  • Members
  • PipPipPip
  • 134 Bài viết
Điểm đánh giá: 53 (tàm tạm)

Đã gửi 17 March 2009 - 11:53 PM

Chào bạn thangkho,
Ðây là cái lisp mình sửa lại dựa theo gợi ý của bác Duy và cái bản vẽ thực tế mà bạn gửi. Mình dựa vào cái ðặc thù của các text cao ðộ nằm riêng trong lớp textcaodomia ðể phân loại nó ra và nối chúng lại theo cái lisp của bác Tue_nv.
Bạn hãy thử xem có ðạt yêu cầu của bạn không nhé.
Thú thực là mình ðã thử rồi và lisp chạy mất khoảng 30 giây thì xong bản vẽ của bạn. Kiểm tra thử một vài khu vực thì thấy ngon phết, nhýng kiểm tra toàn bộ thì chýa có thời gian, mong bạn thông cảm.

(defun c:n2t()
(setq ss (ssget "X" (list (cons 0 "TEXT") (cons 8 "TEXTCAODOMIA")))
n (sslength ss)
i 0
)
(While (< i n)
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
(setq ss1 (entget te1))
(setq ss2 (entget te2))

(setq nd1 (cdr (assoc 1 ss1)))
(setq nd2 (cdr (assoc 1 ss2)))
(setq st (cdr (assoc 7 ss1)))

(setq po (cdr (assoc 10 ss2)))
(setq hei (cdr(assoc 40 ss1)))

(Command "style" st "" "0" "" "" "n" "n" "n")
(Command "text" po hei "0" (strcat nd2 "." nd1))
(command "erase" te1 "")
(command "erase" te2 "")
(setq i (+ i 2))
)
(Princ)
)

Nếu có gì chýa ðýợc bạn hãy cho mình biết ðể mình tìm cách hoàn thiện nhé. Thanks

Góp &yacute; tí, nếu có g&igrave; xin ðừng giận nhé.
Bạn dùng cái trật tự này
(setq te1 (ssname ss i))
(setq te2 (ssname ss (1+ i)))
là rất nguy hiểm v&igrave; nếu nhý cái text tạo nên cao ðộ không ðýợc sinh ra cùng một quy luật mà ðýợc copy lại từ những text ð&atilde; có rối chỉnh lại giá trị hay bản vẽ có ðoạn ðýợc insert vào thêm hay những l&yacute; do khác th&igrave; cái trật tự trýớc sau khó mà phân biệt ðýợc. Trong ngành bản ðồ, theo nhý tôi biết th&igrave; các ðiểm ðộ cao thýờng ðýợc "tãng dày" trong giai ðoạn biên tập chứ chýa hẳn ðýợc ðo ðạc hoàn toàn.
  • 1