Chuyển đến nội dung
Diễn đàn CADViet
Kỹ sư

[Yêu cầu] Lisp lấy giá trị của dimenson, text và xuất ra file text

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

Em hiện phải vẽ triển khai bản vẽ chi tiết và tổng hợp khối lượng các cấu kiện đc vẽ sẵn trên 1 bản vẽ layout

Do đó em cần thống kê lại trên excel các thông số như dimesion, text đã đc ghi sẵn trên từng cấu kiện trong bản vẽ layout đó.

Công việc này rất nhàm chán, và dễ sai sót vì mất công phải xem, đọc, Alt+tab qua excel, ....

Vậy bác nào có thể viết cho em 1 cái lisp mà em chỉ cần pick vào các text, dimension và Enter là nó xuất ra các giá trị của text, dimension đó ra 1 file text (csv hay txt)

 

Quan trọng là trong file text đó, các giá trị đc sắp xếp theo thứ tự mà em đã pick trên bản vẽ

 

Cảm ơn các bác

Chúc các bác một cuối tuần vui vẻ!

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 hiện phải vẽ triển khai bản vẽ chi tiết và tổng hợp khối lượng các cấu kiện đc vẽ sẵn trên 1 bản vẽ layout

Do đó em cần thống kê lại trên excel các thông số như dimesion, text đã đc ghi sẵn trên từng cấu kiện trong bản vẽ layout đó.

Công việc này rất nhàm chán, và dễ sai sót vì mất công phải xem, đọc, Alt+tab qua excel, ....

Vậy bác nào có thể viết cho em 1 cái lisp mà em chỉ cần pick vào các text, dimension và Enter là nó xuất ra các giá trị của text, dimension đó ra 1 file text (csv hay txt)

 

Quan trọng là trong file text đó, các giá trị đc sắp xếp theo thứ tự mà em đã pick trên bản vẽ

 

Cảm ơn các bác

Chúc các bác một cuối tuần vui vẻ!

Bạn dùng cái này xem ưng bụng không?

(defun C:HA()	;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION"))))
      	fn (getfiled "Chon file de save" "" "csv" 1)
      	fw (open fn "w"))
(foreach n lst
 (cond
  ((= (cdr (assoc 0 (entget n))) "TEXT") (setq txt (cdr (assoc 1 (entget n)))))
  ((= (cdr (assoc 0 (entget n))) "MTEXT") (setq txt (cdr (assoc 1 (entget n)))))
  ((= (cdr (assoc 0 (entget n))) "DIMENSION")
(if (= (cdr (assoc 1 (entget n))) "")
	(setq txt (rtos (cdr (assoc 42 (entget n)))))
	(setq txt (cdr (assoc 1 (entget n)))))))
 (princ (strcat txt "\n") fw))
(close fw))

  • Like 1
  • Vote tăng 2

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

Rất vui khi nhận được lisp của bác

Cảm ơn bác

Mới đầu dùng thử thì có hiện tượng dimension hoặc text mà bao gồm chuỗi kí tự cả chữ và số thì kết quả xuất ra bao gồm cả cụm chữ và thêm 1 con số trích ra từ chuỗi kí tự đó

ví dụ như dim hoặc text: "150x600" thì kết quả trên file csv sẽ là "150x600" và "150"

 

Nhưng sau khi test tiếp thì lại k0 thấy hiện tượng đó nữa

 

Với cả, bác có thể sửa lisp hộ em sao cho kết quả xuất ra có thêm 1 cột chú thích, nếu là đối tượng là text thì có ghi chú là text1, text2, ...nếu là dimension thì ghi chú là dim1, dim2,... như trong hình được không ạ?

 

kq.jpg

 

Cảm ơn bá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

Rất vui khi nhận được lisp của bác

Cảm ơn bác

Mới đầu dùng thử thì có hiện tượng dimension hoặc text mà bao gồm chuỗi kí tự cả chữ và số thì kết quả xuất ra bao gồm cả cụm chữ và thêm 1 con số trích ra từ chuỗi kí tự đó

ví dụ như dim hoặc text: "150x600" thì kết quả trên file csv sẽ là "150x600" và "150"

 

Nhưng sau khi test tiếp thì lại k0 thấy hiện tượng đó nữa

 

Với cả, bác có thể sửa lisp hộ em sao cho kết quả xuất ra có thêm 1 cột chú thích, nếu là đối tượng là text thì có ghi chú là text1, text2, ...nếu là dimension thì ghi chú là dim1, dim2,... như trong hình được không ạ?

 

kq.jpg

 

Cảm ơn bác!

Đây bạn:

(defun C:HA( / lst fn fw index x y z txt)	;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION"))))
      	fn (getfiled "Chon file de save" "" "csv" 1)
      	fw (open fn "w")
      	index 0 x 1 y 1 z 1)
(repeat (length lst)
 (cond
  ((= (cdr (assoc 0 (entget (nth index lst)))) "TEXT") (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "text" (itoa x)) x (1+ x)))
  ((= (cdr (assoc 0 (entget (nth index lst)))) "MTEXT") (setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "mtext" (itoa y)) y (1+ y)))
  ((= (cdr (assoc 0 (entget (nth index lst)))) "DIMENSION")
(if (= (cdr (assoc 1 (entget (nth index lst)))) "")
	(setq txt (strcat (rtos (cdr (assoc 42 (entget (nth index lst))))) "," "dim" (itoa z)) z (1+ z))
	(setq txt (strcat (cdr (assoc 1 (entget (nth index lst)))) "," "dim" (itoa z)) z (1+ z)))))
 (princ (strcat txt "\n") fw)
 (setq index (1+ index)))
(close fw))

  • 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

@Bác ĐVH : Bác đổi foreach sang repeat và dùng Index làm chi ạ ^^

Ngoài ra, nếu dùng *Text thì bác cũng cần xử lý trường hợp có Rtext ạ

Theo e thì viết kiểu như thế này :

(defun C:HA1(/ lst fn fw i j) ;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (mapcar 'entget (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))
   	fn (getfiled "Chon file de save" "" "csv" 1)
   	fw (open fn "w") i 0 j 0)
(foreach n lst
(princ
 (cond
  ((wcmatch (cdadr n) "*TEXT")(strcat (acet-dxf 1 n) ";Text" (itoa (setq i (1+ i))) "\n"))  
  ((= (cdadr n) "DIMENSION")(strcat (if (= (acet-dxf 1 n) "")(rtos (acet-dxf 42 n))(acet-dxf 1 n))  ";Dim" (itoa (setq j (1+ j))) "\n"))
 )
  fw
 )
 )
(close fw))

 

P/s thêm : do bác ĐVH chỉ lấy string dạng thô, nên nếu gặp các MText hoặc DimText có Format thì kết quả xuất ra có thể không được như ý (như trường hợp lỗi đầu tiên kia), chứ không phải là true contents nữa ^^

  • 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

@Bác ĐVH : Bác đổi foreach sang repeat và dùng Index làm chi ạ ^^

Ngoài ra, nếu dùng *Text thì bác cũng cần xử lý trường hợp có Rtext ạ

Theo e thì viết kiểu như thế này :

(defun C:HA1(/ lst fn fw i j) ;Doan Van Ha Cadviet.com
(princ "\nChon cac Text/Mtext/Dimension can xuat ra file...")
(setq lst (mapcar 'entget (acet-ss-to-list (ssget '((0 . "*TEXT,DIMENSION")))))
   	fn (getfiled "Chon file de save" "" "csv" 1)
   	fw (open fn "w") i 0 j 0)
(foreach n lst
(princ
 (cond
  ((wcmatch (cdadr n) "*TEXT")(strcat (acet-dxf 1 n) ";Text" (itoa (setq i (1+ i))) "\n"))  
  ((= (cdadr n) "DIMENSION")(strcat (if (= (acet-dxf 1 n) "")(rtos (acet-dxf 42 n))(acet-dxf 1 n))  ";Dim" (itoa (setq j (1+ j))) "\n"))
 )
  fw
 )
 )
(close fw))

 

P/s thêm : do bác ĐVH chỉ lấy string dạng thô, nên nếu gặp các MText hoặc DimText có Format thì kết quả xuất ra có thể không được như ý (như trường hợp lỗi đầu tiên kia), chứ không phải là true contents nữa ^^

- Vâng, đôi lúc nó vẫn thường ngớ ngẩn như vậy! Khi mang trong đầu ý tưởng text1, text2... thì tự nhiên nghĩ phải repeat+index, hoá ra viết xong thì thấy lãng xẹt, nhưng không sai nên biếng sửa.

- Đúng là "thô" thật.

P/S: có lúc viết 1 hàm mất cả vài ba tiếng, hoá ra nghĩ lại chỉ cần 1 dòng. Lại có lúc đổ công sức để viết 1 hàm... có sẵn nữa chứ. Kể cũng tức mà... vui, Ket ạ!

  • 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

em đã thử dùng lisp của cả 2 bác

Lisp nào cũng lấy KQ ngon lành

có điều lisp của bác Ketxu phải thêm 1 công đoạn tách đoạn chú thích Text1, text2,... ra khỏi nội dung chính

Chân thành cảm ơn các bác

Chúc các bác sức khỏe và thà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

À, tiện đây các bác cho em hỏi thêm 1 chút

 

1. Em thường lấy kết quả ra excel, rồi kết hợp với các dòng lệnh của CAD như ((command "insert" ....), (command "text" ...) ) rồi quay sang CAD paste vào dòng lệnh để chèn 1 loạt các block, text, ... vào trong bản vẽ

Vậy em muốn save as và đóng bản vẽ vừa vẽ đó thì viết dòng lệnh trong như thế nào được ạ? Để có thể lưu tên file 1 cách nhanh gọn và chính xác (vì quá nhiều bản vẽ tương tự nhau về kí hiệu, chỉ khác nhau 1 vài con số và em thường save as nhầm tên :( )

 

2. Chèn text vào 1 vị trí xác định bằng cách viết câu lệnh trong excel rồi paste sang CAD thì em đã biết.

Nay em muốn edit 1 dòng text (có vị trí đã xác định) thì phải viết dòng lệnh như thế nào được ạ?

 

3. Em muốn chèn dimension hoặc edit dimension có sẵn bằng cách như trên có được k0 ạ?

Hiện tại em phải chọn giải pháp hơi thô thiển là ẩn giá trị hiển thị của dimension và chèn text vào vị trí đó.

 

Cảm ơn các bá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

À, tiện đây các bác cho em hỏi thêm 1 chút

 

1. Em thường lấy kết quả ra excel, rồi kết hợp với các dòng lệnh của CAD như ((command "insert" ....), (command "text" ...) ) rồi quay sang CAD paste vào dòng lệnh để chèn 1 loạt các block, text, ... vào trong bản vẽ

Vậy em muốn save as và đóng bản vẽ vừa vẽ đó thì viết dòng lệnh trong như thế nào được ạ? Để có thể lưu tên file 1 cách nhanh gọn và chính xác (vì quá nhiều bản vẽ tương tự nhau về kí hiệu, chỉ khác nhau 1 vài con số và em thường save as nhầm tên :( )

 

2. Chèn text vào 1 vị trí xác định bằng cách viết câu lệnh trong excel rồi paste sang CAD thì em đã biết.

Nay em muốn edit 1 dòng text (có vị trí đã xác định) thì phải viết dòng lệnh như thế nào được ạ?

 

3. Em muốn chèn dimension hoặc edit dimension có sẵn bằng cách như trên có được k0 ạ?

Hiện tại em phải chọn giải pháp hơi thô thiển là ẩn giá trị hiển thị của dimension và chèn text vào vị trí đó.

 

Cảm ơn các bác!

Tiếc là sáng nay tôi phải đi công tác vài ngày nên không thể giúp kịp. Bác nào có thể giúp bạn ấy với? Thanks.

  • 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
À, tiện đây các bác cho em hỏi thêm 1 chút 1. Em thường lấy kết quả ra excel, rồi kết hợp với các dòng lệnh của CAD như ((command "insert" ....), (command "text" ...) ) rồi quay sang CAD paste vào dòng lệnh để chèn 1 loạt các block, text, ... vào trong bản vẽ Vậy em muốn save as và đóng bản vẽ vừa vẽ đó thì viết dòng lệnh trong như thế nào được ạ? Để có thể lưu tên file 1 cách nhanh gọn và chính xác (vì quá nhiều bản vẽ tương tự nhau về kí hiệu, chỉ khác nhau 1 vài con số và em thường save as nhầm tên :( )

 

2. Chèn text vào 1 vị trí xác định bằng cách viết câu lệnh trong excel rồi paste sang CAD thì em đã biết. Nay em muốn edit 1 dòng text (có vị trí đã xác định) thì phải viết dòng lệnh như thế nào được ạ?

 

3. Em muốn chèn dimension hoặc edit dimension có sẵn bằng cách như trên có được k0 ạ? Hiện tại em phải chọn giải pháp hơi thô thiển là ẩn giá trị hiển thị của dimension và chèn text vào vị trí đó. Cảm ơn các bác!

3 ý trên -> Bạn đều dùng giải pháp là viết hàm trong Excel -> rồi Paste sang CAD phải không?

Nếu có thể, bạn hãy upload file CAD lên đây và nói cụ thể hơn nhé

  • 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

Lisp nào cũng lấy KQ ngon lành

có điều lisp của bác Ketxu phải thêm 1 công đoạn tách đoạn chú thích Text1, text2,... ra khỏi nội dung chính

Cái này do format CVS ở máy Ketxu nhận dấu ; làm dấu phân cách, bạn sửa trong code chỗ ";Text" , ";Dim" thành ",Text" , ",Dim" là được

  • 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ái này do format CVS ở máy Ketxu nhận dấu ; làm dấu phân cách, bạn sửa trong code chỗ ";Text" , ";Dim" thành ",Text" , ",Dim" là được

Vâng, em làm được rồi ạ

Thanks bác!

 

3 ý trên -> Bạn đều dùng giải pháp làănz viết hàm trong Excel -> rồi Paste sang CAD phải không?

Nếu có thể, bạn hãy upload file CAD lên đây và nói cụ thể hơn nhé

Công việc của em hiện tại là vẽ chi tiết, dựa vào bản vẽ layout cho trước

Từ bản vẽ layout cho trước, em dùng lisp của bác Doan Van Ha hay bác Ketxu đã viết hộ em trên kia để lấy các thông số như kích thước, tên cấu kiện,., ra Excel (trước đây thì em dùng tay) Từ kết quả trên Excel đó, em tính toán khối lượng các thứ rồi ra bản vẽ chi tiết cho từng cấu kiện.dựa trên form bản vẽ có sẵn, chỉ có việc sửa kích thước và nhập lại khối lượng thôi. 1 bản vẽ của 1 cấu kiện có kiểu như thế này: ban_ve.jpg

(Sory, em đang dùng tạm máy thằng em, k0 có CAD nên vẽ tạm bằng Paint)

 

Do đã có sẵn các số liệu, kí hiệu, khối lượng trên file Excel, mà số lượng cấu kiện cùng 1 kiểu là nhiều nên em nghĩ ra cách viết các hàm trên excel rồi paste sang CAD để vẽ cho nhanh.

Từ đó, em vẽ một bản vẽ mẫu, thể hiện nhưng chi tiết, chữ chung chung mà bản vẽ nào cũng có, chỉ để trống những chỗ cần thay đổi như kích thước, tên cấu kiện, khối lượng vật liệu, .... rồi chèn các thứ cần thiết vào và save as ra 1 file khác.

Để chèn text thì em dùng viết công thức:

(command "text" '(x y) 2 0 "DAM 01-1001")

.....

Từ đó thì em muốn:

1. Bớt 1 công đoạn thủ công đó là Save as ra 1 bản vẽ khác và tự động ghi tên file khi save as với giá trị đã viết trong excel

 

Do vẽ trên bản vẽ mẫu, nên sau khi chèn các đối tượng bằng excel thì phải save as sang 1 file khác, và công việc dễ nhầm lẫn nữa là ghi nhầm tên file. kí hiệu trong bản vẽ 1 kiếu mà kí hiệu tên file bản vẽ 1 kiểu.

 

2. Nếu em edit từ bản vẽ mẫu thì chỉ việc chèn các chữ số vào chỗ trống cần thiết là Okie. Vấn đề là nếu em muốn save as từ 1 bản vẽ đã sửa khác, tức là các chỗ trống cần điền text thì đã có text, nay chỉ việc sửa số kia. nên em muốn hỏi hàm để edit text ở vị trí xác định, thay bằng 1 giá trị text khác đã được định nghĩa trong excel.

 

3. Em chỉ biết chèn text và block.

Nên em chèn dimenssion bằng cách là xóa chữ số trong dimension đó đi, chỉ để lại các đường dim, đường gióng, và sau đó là chèn 1 text vào vị trí của chữ số trên dimension

ví dụ như trong bản vẽ trên thì các kích thước 2000, 1000, ... chỉ là những text em chèn vào

cái này nhiều khi cũng bất tiện, nên em muốn biết có cách nào để chèn dimension hoặc edit dimension để nhưng con số 2000, 1000 ... kia là những con số của dim, là 1 bộ phận của dimension, chứ k0 phải là 1 text đơn thuần

 

Rất mong nhận được trả lời của các bác

Thanks!

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. Nếu em edit từ bản vẽ mẫu thì chỉ việc chèn các chữ số vào chỗ trống cần thiết là Okie. Vấn đề là nếu em muốn save as từ 1 bản vẽ đã sửa khác, tức là các chỗ trống cần điền text thì đã có text, nay chỉ việc sửa số kia. nên em muốn hỏi hàm để edit text ở vị trí xác định, thay bằng 1 giá trị text khác đã được định nghĩa trong excel.

 

Bận quá! Tranh thủ trả lời bạn câu 2. Hy vọng bạn làm được

Câu 2 :

Có 2 cách :

Cách 1 : Các Text ở vị trí có sẵn trong Excel -> Có thể vận dụng Lisp đọc dữ liệu trong Excel (đã có trên diễn đàn) Đọc các Text có tọa độ ghi trong Excel và ứng với các Text có tọa độ đó ghi giá trị mới vào.

 

Cách 2 : Làm trực tiếp trên Excel rồi Paste vào CAD.

Soạn hàm Trong Excel

 

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (10 1500 2500 0))) 0)) "CAD")

trong đó : 1500 là tọa độ X của Text; 2500 là tọa độ Y của Text . "CAD" là từ muốn thay

 

-> Hy vọng bạn làm được

  • 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

Rất thành thật xin lỗi bác TueNV

Bác đã trả lời cho em mà em h mới nói lời cảm ơn bác được

Trên cty em chặn internet mà máy ở nhà thì lại k0 có CAD nên phải về nhà copy đoạn code của bác rồi hôm sau lên cty thử

 

Về đoạn code bác cho em, em cũng đã thử dùng rồi mà không được bác ạ

Bác có thể hướng dẫn cho em cách để sử dụng được đoạn code trên không ạ

 

Em cũng hay phải sửa lại tên bản vẽ trong khung tên theo tên file đã định nghĩa

Và em chế cái lisp như sau:

(setq name (getvar "dwgname"))
(command "text" '(x y 0) 2 0 name)

 

Nhưng mà dùng cái này thì:

1. mất công xóa cái text cũ -> em muốn dùng code trên của bác

2. nó thêm cái chữ .dwg sau cái tên file mà em muốn ghi vào và em muốn bỏ luôn cái này thì sửa đoạn code trên như thế nào ạ

 

Em cũng mới mày mò Lisp nên mong các bác chỉ giáo

Thanks!

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

Theo ý của bác Tue thì

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring (vlax-ename->vla-object (ssname (ssget '((0 . "TEXT"))) 0)) name)

 

Hoặc nếu bạn biết chính xác điểm chèm text cũ (x,y ) thì:

 

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" (list (cons 0 "TEXT") (cons 10 (list x y 0)))) 0)) name)

  • 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

Thanks bac

Doan code thu nhat em dung dc roi a

Nhung ghep voi doan code thu 2 vao 1 file lisp thi k0 chay dc

Vi du em co file D15-01.dwg va em muon edit text o vi tri '(250 98 0) thi phai edit code ntn a? Nho bac sua cu the ho em voi a

Thanks!

Cty em k0 co internet, phai online bang dt nen em k0 go dc TV co dau, xin loi ca bac

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

Nói túm lại, để edit được cái text cũ, bạn phải chọn được nó.

Cách 1 là chọn thủ công, có nghĩa là bạn phải kích chuột chọn nó.

cách 2: là chọn tự động bằng bộ lọc, bạn phải biết chắc nó phải mang 1 giá trị nào đó mà text khác không có, nếu không thì các text có cùng điều kiện sẽ cũng được chọn và bị thay luôn. Có nhiều điều kiện để lọc như thông qua layer, thông qua mã mở rộng, thông qua đặc thù nội dung của text v.v..... Trong ví dụ của bạn ở trên thì dựa vào điểm chèn text. Mà cái điểm chèn này mang mã 10 hay 11 lại phụ thuộc vào align text và bạn phải biết chinh xác x, y là bao nhiêu.

 

Có vài góp ý cho bạn, hy vọng bạn làm được. Nếu không, bạn post cái bản vẽ có cái text đó lên anh em xem rồi tư vấn cho bạn.

 

Thân.

  • 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

em dang online bang dt ne k0 up ban ve len day duoc.

Cai em can o day la edit text o vi tri trong khung ten ban ve, va vi tri day thi la xac dinh roi

Em cung k0 biet la cai text do co ma 10 hay 11, va em cung k0 biet cai ma day xem o dau nua

Thanks bac

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ậy thì bạn thử cái code của bác Tue xem

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (10 250 98 0))) 0)) name)

  • 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

Rất thành thật xin lỗi bác TueNV

Bác đã trả lời cho em mà em h mới nói lời cảm ơn bác được

Trên cty em chặn internet mà máy ở nhà thì lại k0 có CAD nên phải về nhà copy đoạn code của bác rồi hôm sau lên cty thử

 

Về đoạn code bác cho em, em cũng đã thử dùng rồi mà không được bác ạ

Bác có thể hướng dẫn cho em cách để sử dụng được đoạn code trên không ạ

 

Em cũng hay phải sửa lại tên bản vẽ trong khung tên theo tên file đã định nghĩa

Và em chế cái lisp như sau:

(setq name (getvar "dwgname"))
(command "text" '(x y 0) 2 0 name)

 

Nhưng mà dùng cái này thì:

1. mất công xóa cái text cũ -> em muốn dùng code trên của bác

2. nó thêm cái chữ .dwg sau cái tên file mà em muốn ghi vào và em muốn bỏ luôn cái này thì sửa đoạn code trên như thế nào ạ

 

Em cũng mới mày mò Lisp nên mong các bác chỉ giáo

Thanks!

Hề hề hề,

Thử thêm vào code của bạn hai dòng code nữa nhé;

 

(setq name (getvar "dwgname"))

(setq n (strlen name))

(setq name (substr name 1 (- n 4)))

(command "text" '(x y 0) 2 0 name)

May ra thì ngon như bạn muốn.

Hề hề hề.

  • 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

Vậy thì bạn thử cái code của bác Tue xem

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (10 250 98 0))) 0)) name)

 

k0 biết có phải đặt các biến j nữa k0 chứ vẫn k0 được bác ạ

Cảm ơn bác nhiều!

Hề hề hề,

Thử thêm vào code của bạn hai dòng code nữa nhé;

 

(setq name (getvar "dwgname"))

(setq n (strlen name))

(setq name (substr name 1 (- n 4)))

(command "text" '(x y 0) 2 0 name)

May ra thì ngon như bạn muốn.

Hề hề hề.

 

Cũng bỏ được đuôi .dwg ngon bác ạ, nhưng mà em muốn edit text 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

 

k0 biết có phải đặt các biến j nữa k0 chứ vẫn k0 được bác ạ

 

 

Thế này nhé, nếu bạn không post được cái bản vẽ có cái text kia lên. Bạn dùng lệnh

 

(entget (car (entsel))) để xem cái dxf của cái text đó (Trong đó có điểm chèn), hoặc copy cái đoạn dxf đó post lên đây xem nào.

  • 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

Sau khi dung lenh tren cua bac voi 1 text ma em muon sua thi no ra the nay:

 

Command: (entget (car (entsel)))

Select object: ((-1 . <Entity name: 7ef97d00>) (0 . "TEXT") (330 . <Entity

 

name: 7ef93c38>) (5 . "7D0") (100 . "AcDbEntity") (67 . 1) (410 . "Layout1") (8

 

. "0") (6 . "Continuous") (100 . "AcDbText") (10 813.5 15.0 0.0) (40 . 3.5) (1

 

. "E01") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 ."ROMAND") (71 . 0) (72 . 1) (11

 

818.0 15.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0))

 

 

Bac xem ho em voi

Toi ve em se up ban ve len a

Cty em no chan het internet, chan het cong usb, k0 cop ve dc a

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

Sau khi dung lenh tren cua bac voi 1 text ma em muon sua thi no ra the nay:

 

Command: (entget (car (entsel)))

Select object: ((-1 . <Entity name: 7ef97d00>) (0 . "TEXT") (330 . <Entity

 

name: 7ef93c38>) (5 . "7D0") (100 . "AcDbEntity") (67 . 1) (410 . "Layout1") (8

 

. "0") (6 . "Continuous") (100 . "AcDbText") (10 813.5 15.0 0.0) (40 . 3.5) (1

 

. "E01") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 ."ROMAND") (71 . 0) (72 . 1) (11

 

818.0 15.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0))

 

 

Bac xem ho em voi

Toi ve em se up ban ve len a

Cty em no chan het internet, chan het cong usb, k0 cop ve dc a

Hề hề hề,

Nếu muốn đổi cái nội dung text "E01" của bạn thành cái text "Ban ve cua ong" bạn hãy làm như sau:

(entmod (subst (cons 1 "Ban ve cua ong") (assoc 1 (setq els (entget (car (entsel "\n Chon text can thay"))))) els))

Hề hề hề,...

  • 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

Bạn thử xem

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (10 813.5 15.0 0.0))) 0)) name)

 

hoặc (Nếu cái text kia là "E01" duy nhất trên bản vẽ)

 

(setq name (vl-filename-base (getvar "dwgname")))

(vla-put-textstring(vlax-ename->vla-object(ssname (ssget "X" '((0 . "TEXT") (1 . "E01"))) 0)) name)

  • 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

×