Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
48 replies to this topic

#1 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 02 October 2011 - 09:06 AM

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

Hình đã gửi


#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 October 2011 - 03:31 PM

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

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 02 October 2011 - 07:20 PM

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 ạ?

Hình đã gửi

Cảm ơn bác!
  • 0

Hình đã gửi


#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 October 2011 - 08:20 PM

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 ạ?

Hình đã gửi

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

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 October 2011 - 09:51 PM

@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 ^^
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 October 2011 - 10:37 PM

@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 ạ!
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 03 October 2011 - 10:59 PM

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

Hình đã gửi


#8 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 03 October 2011 - 11:25 PM

À, 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!
  • 0

Hình đã gửi


#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 October 2011 - 06:15 AM

À, 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.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 October 2011 - 06:55 AM

À, 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é
  • 1

#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 October 2011 - 11:13 AM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#12 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 05 October 2011 - 12:14 AM

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: Hình đã gửi
(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!
  • 0

Hình đã gửi


#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 October 2011 - 06:46 AM


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

#14 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 16 October 2011 - 09:38 PM

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

Hình đã gửi


#15 npham

npham

    biết lệnh rotate

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

Đã gửi 16 October 2011 - 10:00 PM

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

#16 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 17 October 2011 - 11:25 AM

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

Hình đã gửi


#17 npham

npham

    biết lệnh rotate

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

Đã gửi 17 October 2011 - 11:41 AM

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

#18 Kỹ sư

Kỹ sư

    biết vẽ arc

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

Đã gửi 17 October 2011 - 11:57 AM

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

Hình đã gửi


#19 npham

npham

    biết lệnh rotate

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

Đã gửi 17 October 2011 - 01:42 PM

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

#20 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 17 October 2011 - 04:55 PM

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ề.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.